关于qt学习的一点小记录(1)
生活随笔
收集整理的這篇文章主要介紹了
关于qt学习的一点小记录(1)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今日為了應付學校作業要求
決定現學qt來制作界面
畢竟c++不像在這方面c#可以那么方便
?
qt主要依靠信號、槽來實現類似winform中的消息
鑒于要盡快做完,故而沒有細看qt
只是大概了解了下界面的制作方法
所以依然還有不少問題
?
好了我先從qt設計器開始了。
嗯,很好用的界面編輯器。。一目了然啊~~~
遇到的問題有:
1、槽明明在窗口類聲明了,可設計器還是找不到...
解決:這個應該還需要在某些地方增加點代碼,畢竟我find了一下別人demo的槽函數名字,發現出現在了好幾個地方
嗯。。這次時間關系沒有深究,百度了一下,應該在設計器的左上角位置有個編輯信號/槽
然后拖動控件改變發送者接受者等等。
?
?
最后在主類中加入在設機器中添加時槽函數的名字:
?
public slots://添加進程槽void rcv_addp();//刪除進程槽void rcv_killp();//顯示對應進程段頁表void rcv_show();//刷新進程表void rcv_flushow();//調度進程void rcv_play();?
?
2、與控件有關的設置網上資料略少,查找了不少時間,故而記錄一下
主要關于tableview,combobox的
?
tableview://tableview可以通過itemview來設置各類參數以及添加刪除數據 QStandardItemModel *memmodel;memmodel = new QStandardItemModel();//設置列 memmodel->setColumnCount(2);//設置每列的頭名稱(注意中文要用QString::fromLocal8Bit()...不要問我為什么...) memmodel->setHeaderData(0, Qt::Horizontal, QString::fromLocal8Bit("地址")); memmodel->setHeaderData(1, Qt::Horizontal, QString::fromLocal8Bit("空間"));//將model設置給ui的tableview ui.tableView->setModel(memmodel); //設置表頭為固定 ui.tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed); ui.tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Fixed);//設置表頭寬度..我是按百分比設置的 ui.tableView->setColumnWidth(0, 0.3 * ui.tableView->geometry().width()); ui.tableView->setColumnWidth(1, 0.58 * ui.tableView->geometry().width());//設置cell中每列的高度 ui.tableView->verticalHeader()->setDefaultSectionSize(12); //隱藏行號 ui.tableView->verticalHeader()->setHidden(true); //設置一次選中一行 ui.tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //添加一行元素//從左到右三個參數依次是:第i行cell,第0列,內容。注意內容要是QString類型的 memmodel->setItem(i, 0, new QStandardItem(QString::number(mt.getphyaddr(i))));?
?
噢...這代碼著色好像和直接粘貼沒區別。。。
?
//獲取選中的數行中第i行第1列的值 QItemSelectionModel *selections = ui.tableView_state->selectionModel();QModelIndexList selected = selections->selectedRows();QModelIndex t_data;mt.addmaxclock();for (auto index : selected) {//這里的selected集合即為選中的所有cell的集合,一次取一個cell//然而因為我設置的一次選中一行cell,這里我只需要獲取第一列即可t_data = statemodel->index(index.row(), 0);// QMessageBox::information(this, "aaa", t_data.data().toString());int pgnum = t_data.data().toInt();if (!it->pg[pgnum]->isRun()) {mt.addpagetomem(it->pg[pgnum]);}else {it->pg[pgnum]->clock = mt.getmaxclock();mt.addmaxclock();}}?
?
接下來是combobox的
?
combobox:
?
//清空combobox ui.cb_killp->clear();//添加item(第一個參數為text...第二個不知道什么用,顯然不是列表的索引號) ui.cb_killp->addItem(elem.name.c_str(), elem.pid);//獲取當前combobox選中的值string name = ui.cb_killp->currentText().toStdString();//順便,combobox中currentindexchanged信號的問題//鑒于我每次增加一個process的時候,都會刷新一次combobox的列表//這樣也會出發currentindexchanged信號,同時他的槽函數也會更改一下combobox的內容//這樣又會發出一個currentindexchanged信號,以至于死循環//解決方法是刷新combobox的時候關閉信號即可 ui.cb_seep->blockSignals(true);?
最后記錄一下vector的問題
我意圖用一個指針來指向vector中的一個數據...
當然是可以的..但當vector容量增加的時候,地址也會發生改變
最后干脆改成數組了..
?
轉載于:https://www.cnblogs.com/magina888/p/4570039.html
總結
以上是生活随笔為你收集整理的关于qt学习的一点小记录(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql表空间配置
- 下一篇: UILable文字不居中问题