//設置行列均分 tableWidget->horizontalHeader()->setStretchLastSection(true); //就是這個地方 tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch); //使行列頭自適應寬度,最後一列將會填充空白部分 table->horizontalHeader()->setStretchLastSection(true); //使行列頭自適應寬度,全部列平均分來填充空白部分 table->horizontalHeader()->setResizeMode(QHeaderView::Strtch); //使行自適應高度,假如行不少的話,行的高度不會一直減少,當達到必定值時會自動生成一個QScrollBar table->verticalHeader()->setResizeMode(QHeaderView::Strtch); //隱藏左邊的序號 QHeaderView* headerView = table的名字->verticalHeader(); headerView->setHidden(true);
//設置選擇行爲,以行爲單位 tableWidget->setSelectionBehavior ( QAbstractItemView::SelectRows); //設置選擇模式,選擇單行 tableWidget->setSelectionMode ( QAbstractItemView::SingleSelection); //獲取指定行數的某個數據: print(self.Order_table.item(del_row,0).text()) //修改某行數據觸發信號與槽函數 self.Order_table.itemChanged.connect(self.itemChanged_Print)
//刪除選中行 int i = ui->tableWidget->currentRow(); ui->tableWidget->removeRow(i); QTableWidget *table = new QTableWIdget(this); table->setColumnCount(5); //設置列數 table->setRowCount(3); //設置行數/ /*設置列名*/ QStringList headers; headers<<"列名1"<<"列名2"<<"列名3"; table->setHorizontalHeaderLabels(headers); /*給單元格添加內容*/ void addItemContent(int row, int column, QString content) { QTableWidgetItem *item = new QTableWidgetItem (content); table->setItem(row, column, item); } /*給單元格中增長圖標*/ QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), NULL); //只加入圖標,沒有字符串 QTableWidgetItem *item = new QTableWidgetItem(QIcon("myImage.jpg"), myString); //加入圖標和字符串 table->setItem(row, column, item); /*插入一行*/ int row = table->rowCount(); table->insertRow(row); /*插入一列*/ int column = table->columnCount(); table->insertColumn(column); int rowIndex = m_pAttrbuteList->rowCount(); tableWidget->setRowCount(rowIndex + 1);//總行數增長1 tableWidget->setRowHeight(rowIndex, 24);//設置行的高度 print(self.Order_Table.rowCount())//獲取列表最大行數
注:在不選擇行的狀況下發現每次點擊後刪除的都是第一行,i的輸出都是0.
緣由其實很簡單,就是由於table的當前焦點在第同樣的第一個單元格所致使的,解決的辦法就是讓table失去焦點,在構造函數裏面添加ui->tableWidget->setFocusPolicy(Qt::NoFocus);
而後再試,發現點擊刪除按鈕若是不選中行的話是不能刪除的,返回的i此時是-1。app
//設置每行內容不可編輯 table->setEditTriggers(QAbstractItemView::NoEditTriggers); /*參數設置: QTableWidget.NoEditTriggers 0 No editing possible. 不能對錶格內容進行修改 QTableWidget.CurrentChanged 1 Editing start whenever current item changes.任什麼時候候都能對單元格修改 QTableWidget.DoubleClicked 2 Editing starts when an item is double clicked.雙擊單元格 QTableWidget.SelectedClicked 4 Editing starts when clicking on an already selected item.單擊已選中的內容 QTableWidget.EditKeyPressed 8 Editing starts when the platform edit key has been pressed over an item. QTableWidget.AnyKeyPressed 16 Editing starts when any key is pressed over an item.按下任意鍵就能修改 QTableWidget.AllEditTriggers 31 Editing starts for all above actions.以上條件全包括*/ //設置只能選擇一行,不能選擇多行 table->setSelectionMode(QAbstractItemView::SingleSelection); /*去掉每行的行號*/ QHeaderView *headerView = table->verticalHeader(); headerView->setHidden(true); /*設置讓某個單元格或某行選中*/ table->setCurrentCell(row, column, QItemSelectionModel::Select); //選中一行: table->setCurrentCell(row, QItemSelectionModel::Select);//(注意此處的列沒有值)
準輸入對話框:函數
ok2 = QInputDialog.getText(self,"Platelet type distribution ","Please enter the platelet type distribution")//第四個參數(設置輸入框的顯示):QLineEdit.Password if ok0: self.inputL = QLineEdit() self.inputL.setText(Item_row0) newItem = QTableWidgetItem(Item_row0) self.Order_table.setItem(0,0,newItem)
ischecked()//判斷數據是否選中 QComboBox類 currentText() //獲取當前文本的值
//加載圖片 png=QPixmap('D:/codeWorkSpace/Edgin_machine/1.jpg').scaled(self.Pic_Val.width(),self.Pic_Val.height()) self.Pic_Val.setPixmap(png) //QLabel控件加載圖片自適應變化 self.Pic_Val.setScaledContents(True) self.Pic_Val.resize(self.Pic_Val.size())
//設置窗口爲固定大小 Edit_Order_UI.setFixedSize(1200, 800)
//設置時間格式 self.EndTime.setDisplayFormat("yyyy-MM-dd HH:mm:ss") //獲取系統時間:(引入datetime模塊) datetime.now()
//按行追加數據: self.textEdit.append(str) //向當前行插入數據: self.textEdit.insertPlainText(arr.get(a))
//禁止編輯: self.add_order.CQ_Edit.setEnabled(False) //設置輸入範圍 self.W1_Edit.setValidator(QDoubleValidator(0.0, 4.0001, 4, self)) self.TQ_Edit.setValidator(QIntValidator(0, 10000, self)) //智能輸入 self.completer = QCompleter(ls)//ls爲列表,須要提示的數據 self.LineEdit.setCompleter(self.completer)
def mousePressEvent(self, event):
def mouseMoveEvent(self, event):
print event.pos() posx = event.pos().x() posy = event.pos().y()
self.Get_Point1_Button.clicked.connect(lambda :self.Draw_Point(5))
self.p = QPainter(self.qpixmap) #指定繪製地方,被繪製對象通常爲QPixmap類 self.p.setPen(QPen(Qt.red, 2, Qt.SolidLine)) #設置畫筆屬性,參數1:繪製顏色,參數2:繪製像素大小,參數3:繪製類型
self.p.setFont(QFont("Decorative", 15))#設置繪製字體大小 self.p.drawText(QRect(self.point1[0]-9, self.point1[1]-22, 20, 20), Qt.AlignCenter, "1")#繪製文字 self.p.drawEllipse(self.point1[0]-3, self.point1[1]-2, 8, 8)#繪製圓
注:若是要根據鼠標移動,時事繪製圖像,結合鼠標按下事件使用,同時不斷刷新QPixmap類,使用QPainter類,注意用p.end()結束,不然程序會報錯。佈局
一、要求:被佈局的控件須要策略(sizePolicy)須要爲:Expanding字體
二、在佈局中設置佈局比例,水平方向佈局比例(layoutColumnStretch)設置,垂直方向佈局比例(layoutRowStretch)設置.ui
12.1消息框定義方式this
Qm=QMessageBox.information(self, u"提示", u"物料處理失敗,從新拍攝圖片?", QMessageBox.Yes|QMessageBox.No)
12.2單擊提示框按鈕觸發事件spa
if Qm==QMessageBox.Yes: self.frist_board_buttun.setText("重拍") self.frist_board_buttun.setEnabled(True) if Qm==QMessageBox.No: self.Send_News("give_up_ramake_image", None)
self.filename = QFileDialog.getOpenFileName(self, "選擇文件", "../Image/", "Image Files(*.jpg *.jpeg *.png *.bmp)")[0]
1.UI界面預覽code
Alt+Shift+Rorm
2.openCV圖片格式轉換成QT可用圖片格式對象
self.screen.image = cv2.cvtColor(self.screen.image, cv2.COLOR_BGR2RGB) #圖片顏色處理 qimage = QImage(self.screen.image.tostring(), self.screen.image.shape[1], self.screen.image.shape[0], self.screen.image.shape[1] * 3,QImage.Format_RGB888) #圖片格式轉換 qpixmap = QPixmap(qimage)
3.qDebug()輸出中文
#pragma execution_character_set("utf-8")