Qt4 QCheckBox 使用教程

setChecked(bool) 设置是否选择

isChecked() 返回bool

发出toggled(bool)信号

 

QHBoxLayout 水平布局 QVBoxLayout 垂直布局 QGridLayout 表格布局

以下g为表格布局 a b 为水平垂直布局任一个

a.addLayout(b) 添加b布局到a上

a.addSpacing(20) 添加20水平宽度的空白 b类型 垂直方向

a.addStretch(10) 添加一个固定长度的延伸

b.addWidget(QWidget) 添加一个QWidget 到布局

b.addStretchFactor(QWidget,20)

g.addLayout(a,0,2) 在第一行第三列添加一个水平布局

g.addWidget(QWidget,0,2,1,2) 在第一行第三列,占一行 两列 位置 添加一个QWidget

g.setRowStretch(1,20) 设置第二行的高度为20

g.setColumnStretch(1,20) 设置第二列的宽度为20

 

 

一般是子类化 QDialog 使用

可以采取标准按钮QDialogButtonBox()

ok_cancel_bt=QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)

调用OK按钮默认 ok_cancel_bt.button(QDialogButtonBox.Ok).setDefault(True)

连接信号和插槽

self.connect(ok_cancel_bt,SIGNAL("accepted()"),self,SLOT("accept()"))

self.connect(ok_cancel_bt,SIGNAL("rejected()"),self,SLOT("reject()"))

具有两个插槽 SIGNAL('accept()') 确定 SIGNAL('reject()') 取消

 

以下是实例代码

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class dumpDialog(QDialog):
def __init__(self,parent=None):
   super(dumpDialog,self).__init__(parent)
   w_label=QLabel("Width:")
   s_label=QLabel("Style:")
   self.b_checkbox=QCheckBox()
   b_label=QLabel("Beveled")
   self.w_spinbox=QSpinBox()
   self.w_spinbox.setRange(0,50)
   self.w_spinbox.setSingleStep(2)
   self.s_combobox=QComboBox()
   self.s_combobox.addItems(["a","b","c","d","e","f"])
   w_label.setBuddy(self.w_spinbox)
   s_label.setBuddy(self.s_combobox)
   """ok_button=QPushButton("OK")
   cancel_button=QPushButton("Cancel")
   vlabel=QHBoxLayout()
   vlabel.addWidget(ok_button)
   vlabel.addWidget(cancel_button)
   """
   ok_cancel_bt=QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
   ok_cancel_bt.button(QDialogButtonBox.Ok).setDefault(True)
   vlabel=QVBoxLayout()
   vlabel.addWidget(ok_cancel_bt)
   vlabel.addSpacing(200)
   layout=QGridLayout()
   layout.addWidget(w_label,0,0)
   layout.addWidget(self.w_spinbox,0,1)
   layout.addWidget(s_label,1,0)
   layout.addWidget(self.s_combobox,1,1,1,3)
   layout.addLayout(vlabel,2,0,1,3)
   self.setLayout(layout)
   """
   self.connect(ok_button,SIGNAL("clicked()"),self,SLOT("accept()"))
   self.connect(cancel_button,SIGNAL("clicked()"),self,SLOT("reject()"))
   """
   self.connect(ok_cancel_bt,SIGNAL("accepted()"),self,SLOT("accept()"))
   self.connect(ok_cancel_bt,SIGNAL("rejected()"),self,SLOT("reject()"))
   self.setWindowTitle("pen")

 

class MainForm(QDialog):
def __init__(self,parent=None):
   super(MainForm,self).__init__(parent)
   self.width=1
   self.beveled=False
   self.style="d"

   penButton=QPushButton("Open")
   self.r_label=QLabel()
   layout=QVBoxLayout()
   layout.addWidget(penButton)
   layout.addWidget(self.r_label)
   self.setLayout(layout)
   self.connect(penButton,SIGNAL("clicked()"),self.setPen)
   self.setWindowTitle("Main")
   self.updateData()

def setPen(self):
   dialog=dumpDialog(self)
   dialog.s_combobox.setCurrentIndex(dialog.s_combobox.findText(self.style))
   if dialog.exec_():
    self.width=dialog.w_spinbox.value()
    self.style=unicode(dialog.s_combobox.currentText())
    self.beveled=dialog.b_checkbox.isChecked()
    self.updateData()

def updateData(self):
   self.r_label.setText("width:%s
style:%s"% (self.width,self.style))

if __name__=="__main__":
app=QApplication(sys.argv)
mf=MainForm()
mf.show()
app.exec_()

 

listWidget = QListWidget() #实例化一个(item base)的列表

listWidget.addItem('dd') #添加一个项

listWidget.addItems([]) # 从序列中添加子项

listWidget.setDragEnabled(True) #设置拖拉

listWidget.sortItems() #排序

listWidget.selectAll()全选

listWidget.setSortingEnabled(bool) #设置自动排序

listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) #设置选择模式

选择模式有:ExtendedSelection 按住ctrl多选, SingleSelection 单选 MultiSelection 点击多选 ContiguousSelection 鼠标拖拉多选

listWidget.setCurrentRow(0) 设置当前选择行 默认为-1

listWidget.count() #得到子项总数

listWidget.item(row).text() #得到第 row 行的内容 listWidget.item(row) 返回一个item 对象

listWidget.takeItem(row) #返回row 行的 所在的item 对象 可以用在 insertItem()中

listWidget.insertItem(2,item) #在第二行插入一项 item 可谓为一个listviewitem对象 或者string

listWidget.setCurrentItem('dd') #设置'dd'为当前项

listWidget.selectedItems() 返回一个 包含item对象 的list 对象

修改item 的内容

item.setText('dsds') # 设置item的内容为dsds item为对象 可从 listWidget.item(row) takeItem(row) 得到

 

button = QPushButton('***) # 实例化一个text为***)的按钮

button.setFocusPolicy() #设置焦点样式 样式有:Qt.NoFocus: 无焦点,Qt.TabFocus:用tab切换焦点,Qt.ClickFocus:点击切换焦点,Qt.StrongFocus:貌似跟click一样 Qt.WheelFocus

button.setCheckable(True) #设置为开关按钮 toggle 就是按下按钮不会弹起

button.isChecked() 返回bool值 只有setCheckable()为true时有效

button.setShortcut('Ctrl+F') #设置快捷方式

 

 

 

QTableWidget继承自QTableView。QSqlTableModel能与QTableView绑定,但不能于QTableWidget绑定。

QSqlTableModel *model = new QSqlTableModel;
model->setTable("employee");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
model->removeColumn(0); // don't show the ID
model->setHeaderData(0, Qt::Horizontal, tr("Name"));
model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

QTableView *view = new QTableView;
view->setModel(model);
view->show();

模型视图结构

Qt4中引入了模型/视图框架来完成数据与表现的分离,这在Qt4中称为InterView框架。

 

MVC设计模式是起源于Smalltalk的一种与用户界面相关的设计模式。MVC包括三个元素:模型(Model)表示数据,视图(View)是用户界面,控制(Controler)定义了用户在界面上的操作。通过使用MVC模式,有效的分离了数据和用户界面,使得设计更为灵活,更能适应变化。

模型:所有的模型都基于QAbstractItemModel类,该类是抽象基类。

视图:所有的视图都从抽象基类QAbstractItemView继承。

 

Interview框架提供了一些常见的模型类和视图类,例如QStandardItemModel,QDirModel,QStringListModel和QColumnView,QHeaderView,QListView,QTableView,QTreeView。

 

相对于使用现有的模型和视图,Qt还提供了更为便捷的类来处理常见的一些数据模型。他们将模型和视图合一,便于处理一些常规的数据类型。使用这些类型虽然简单方便,但也失去了模型视图结构的灵活性,所以要根据具体情况来选择。

 

 

具体区别表格

区别点

QTableView QTableWidget
继承关系   QTableWidget继承自QTableView
使用数据模型setModel 可以使用setModel设置数据模型 setModel是私有函数,不难使用该函数设置数据模型
显示复选框setCheckState 没有函数实现复选框 QTableWidgetItem类中的setCheckState(Qt::Checked);可以设置复选框
与QSqlTableModel绑定 QTableView能与QSqlTableModel绑定 QTableWidget能与QSqlTableModel绑定
     
     

View与Model绑定注意事项

但视图与模型绑定时,模型必须使用new来创建。否则视图不能随着模型的改变而改变。

Eorror错误的写法
QStandardItemModel model(4,2);


model.setHeaderData(0, Qt::Horizontal, tr("Label"));
model.setHeaderData(1, Qt::Horizontal, tr("Quantity"));


ui.tableView->setModel(&model);

for (int row = 0; row < 4; ++row) {
    for (int column = 0; column < 2; ++column) {
        QModelIndex index = model.index(row, column, QModelIndex());
        model.setData(index, QVariant((row+1) * (column+1)));
    }
}

 

 

Right 正确的写法
QStandardItemModel *model;

model = new QStandardItemModel(4,2);
ui.tableView->setModel(model);

model->setHeaderData(0, Qt::Horizontal, tr("Label"));
model->setHeaderData(1, Qt::Horizontal, tr("Quantity"));

for (int row = 0; row < 4; ++row) {
    for (int column = 0; column < 2; ++column) {
        QModelIndex index = model->index(row, column, QModelIndex());
        model->setData(index, QVariant((row+1) * (column+1)));
    }
}
 

 

 

QTableWidget编程注意事项

ui.tbwWellData->setRowCount(88);

不要重复调用上面这个方法,否则会导致界面速度变慢。

 

 

你可能感兴趣的:(Qt4 QCheckBox 使用教程)