QT常用基础控件用法整理

Qt常用基础控件用法整理(仅仅学习记录用)

一、QLabel标签,用于显示文字,图像等内容

以上为Qt助手里摘借出来的所有函数,当然常用的比较重要的以下几个:

void setText(QString); //设置label框内的文本. 
void hide(); //隐藏label框. 
void setBuddy(QWidget*); //把另一个部件设为label框的伙伴,方便快捷使用. 
void clear(); //清空label框内所有内容. 
void setPixmap(QPixmap(QString)); //设置图片. 
void setScaledContents(bool); //设置是否按比例填充满整个label框(非常重要) 
void setToolTip(QString); //设置信息提示,鼠标放在label框上面会自动跳出文字. 
void setAlignment(Qt::Alignment); //设置label框的对齐格式. 
void setStyleSheet(QString); //设置label框的样式

二、QPushButton按钮控件 用于触发响应事件

当然常用的比较重要的以下几个:

void setText(QString); 
void setText(const QString &text); 
QString text() const; 
void setIcon(const QIcon &icon);
QIcon icon() const; 
QSize iconSize() const; 
void setCheckable(bool); 
bool isCheckable() const; 
bool isChecked() const; 
void setDown(bool); 
bool isDown() const; 
void setAutoRepeat(bool); 

用法:

按钮的创建:

QPushButton * btn = new QPushButton;

设置父窗口

btn -> setParent(this);

显示文本 

btn ->setText("张飞");

移动 

btn ->move(x,y);

设置固定大小的窗口

setFixedSize(宽,高);

信号:clicked(),pressed()

三、QLineEdit编辑框表示一个单行文本编辑控件

常见的槽函数:

void clear()  //清空内容
void copy() const  //拷贝内容
void cut()   //剪贴内容
void paste()//粘贴内容
void redo() //恢复
void selectAll() //全选内容
void setText(const QString &) //设置内容
void undo() //取消

常用信号:

1.void cursorPositionChanged(int old, int new); //光标位置改变就发现信号.
2.void returnPressed(); //光标在行编辑框内时,点击回车即发出信号.
3.void selectionChanged() //选择的文本发生变化时,发出信号.
4.void textChanged(const QString & text) //文本发生变化时,发出信号.

四、QRadioButton是单选按钮,当有多个 QRadioButton 控件存在时,只能选中一个

注意:使用 QGroupBox 控件进行分组,该控件通常带有一个边框和一个标题栏,作为容器部件来使用;需要注意的是,QGroupBox 容器内部必须使用布局控件(QLayout)进行布局

第一步:新建分组:QButtonGroup* pBgGroup = new QButtonGroup(this);

第二步:把ui上存在的QRadioButton或者自己创建的QRadioButton对象添加到bgGroup中

pBgGroup->addButton( ui->rabutton_0 ,0);
pBgGroup->addButton( ui->rabutton_1 ,1);
pBgGroup->addButton( ui->rabutton_2 ,2);
ui->rabutton_0->setChecked(true);

第三步:添加信号和槽的关联

connect( pBgGroup, SIGNAL(buttonToggled(int, bool), this, SLOT(on_bgCurGroup_toggled(int, bool)));

connect( ui->rabutton_0, &QRadioButton::toggled, this, SLOT(on_bgClick_toggled(bool)));

第四步:槽函数实现

void RadioButtonGroup::on_bgCurGroup_toggled(int id, bool status) 

  qDebug() << pBgGroup->checkedId(); //组id
  qDebug() << QString::number(id); //QRadioButton id
  qDebug() << QString::number(status); //check status
}

void RadioButtonGroup::on_bgClick_toggled(bool isChecked) 

    if (isChecked == true)
        qDebug() << "单选框被选中";
    else if (isChecked == false)
        qDebug() << "单选框失去焦点";
}

五、QCheckBox复选框,QCheckBox(复选框)和QRadioButton(单选框)都是选项按钮,QButtonGroup可以用来在视觉上把许多复选框组织在一起

信号函数:
void  stateChanged(int state)

重要的继承函数:text()、setText()、pixmap()、setPixmap()、accel()、setAccel()、isToggleButton()、setDown()、isDown()、isOn()、checkState()、 autoRepeat()、isExclusiveToggle()、group()、setAutoRepeat()、toggle()、pressed()、released()、clicked()、toggled()、checkState()、stateChanged()

公有函数:
Qt::CheckState checkState() const 返回复选框的选中状态。如果不需要三态的支持,可以使用QAbstractButton::isChecked(),它返回一个布尔值
bool isTristate() const 复选框是否为一个三态复选框。(默认的是false,也就是说复选框只有两个状态)
void setCheckState(Qt::CheckState state) 设置复选框的选中状态。如果不需要三态的支持,可以使用QAbstractButton:setChecked(),它接受一个布尔值
void setTristate(bool y = true) 设置复选框为一个三态复选框

简单用法:在头文件添加成员变量m_pCurLabel

QCheckBox *pCurCheckBox = new QCheckBox(this);
m_pCurLabel = new QLabel(this);
 
m_pCurLabel->setText("click");
pCurCheckBox->setText(QString::fromLocal8Bit("三态复选框"));
 
// 开启三态模式
pCurCheckBox->setTristate();  
 
// 连接信号槽
connect(pCurCheckBox, SIGNAL(stateChanged(int)), this, SLOT(onCurStateChanged(int)));

//槽函数

void MainWindow::onCurStateChanged(int state)
{
    if (state == Qt::Checked) // "选中"
    {
        m_pCurLabel->setText("Checked");
    }
    else if(state == Qt::PartiallyChecked) // "半选"
    {
        m_pCurLabel->setText("PartiallyChecked");
    }
    else // 未选中 - Qt::Unchecked
    {
        m_pCurLabel->setText("Unchecked");
    }
}

六、QListWidget列表框控件支持两种列表项显示方式,即QListView::IconMode和QListView::ListMode,并且列表框常用的增加、删除、单击、双击操作以及列表项显示方式设置

常见信号函数:

void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
void currentRowChanged(int currentRow)
void currentTextChanged(const QString &currentText)
void itemActivated(QListWidgetItem *item)
void itemChanged(QListWidgetItem *item)
void itemClicked(QListWidgetItem *item)
void itemDoubleClicked(QListWidgetItem *item)
void itemEntered(QListWidgetItem *item)
void itemPressed(QListWidgetItem *item)
void itemSelectionChanged()

简单用法:

QListWidget *listWidget = new QListWidget(this);

 //不加图标
 listWidget->addItem(new QListWidgetItem(tr("Line"))); 
 listWidget->addItem(new QListWidgetItem(tr("Rectangle"))); 
 listWidget->addItem(new QListWidgetItem(tr("Oval"))); 
 listWidget->addItem(new QListWidgetItem(tr("Triangle")));

//加图标
 listWidget->addItem(new QListWidgetItem(QIcon(":/images/line.PNG"), tr("Line"))); 
 listWidget->addItem(new QListWidgetItem(QIcon(":/images/rect.PNG"), tr("Rectangle"))); 
 listWidget->addItem(new QListWidgetItem(QIcon(":/images/oval.PNG"), tr("Oval"))); 
 listWidget->addItem(new QListWidgetItem(QIcon(":/images/tri.PNG"), tr("Triangle")));

七、QListView控件 可以用来以列表的形式展示数据,在Qt中使用model/View结构来管理数据与视图的关系,model负责数据的存取,数据的交互通过delegate来实现

QT提供了一些现成的models用于处理数据项:
QStringListModel 用于存储简单的QString列表。
QStandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据。
QDirModel 提供本地文件系统中的文件与目录信息。
QSqlQueryModel, QSqlTableModel,QSqlRelationTableModel用来访问数据库

对于自定义数据类型,如果要使用QVariant,就必须使用Q_DECLARE_METATYPE注册。

struct ItemsData{
    QString name;
    QString tel;
};

Q_DECLARE_METATYPE(ItemsData

单一数据存取
//存
Item->setData(itemStatus,Qt::UserRole);  // 单一存取

//取
ItemStatus status = (ItemStatus)(index.data(Qt::UserRole).toInt());

结构体数据存取
//存
Item->setData(QVariant::fromValue(itemData),Qt::UserRole+1);//整体存取

//取
QVariant variant = index.data(Qt::UserRole+1);
ItemData datas = variant.value<ItemData>();

简单用法:

QStringList num;

num<<QString("1")<<QString("2")<<QString("3")<<QString("4");

QStringListModel *model = new QStringListModel(num);

ui->listView->setModel(model);

八、QTreeWidget树形控件

信号函数:
void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
void itemActivated(QTreeWidgetItem *item, int column)
void itemChanged(QTreeWidgetItem *item, int column)
void itemClicked(QTreeWidgetItem *item, int column)
void itemCollapsed(QTreeWidgetItem *item)
void itemDoubleClicked(QTreeWidgetItem *item, int column)
void itemEntered(QTreeWidgetItem *item, int column)
void itemExpanded(QTreeWidgetItem *item)
void itemPressed(QTreeWidgetItem *item, int column)
void itemSelectionChanged()

槽函数:
void clear()
void collapseItem(const QTreeWidgetItem *item)
void expandItem(const QTreeWidgetItem *item)
void scrollToItem(const QTreeWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)
简单用法:
QTreeWidget *treeWidget = new QTreeWidget();
treeWidget->setColumnCount(1);
QList<QTreeWidgetItem *> items;
for (int i = 0; i < 10; ++i)
    items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))));
treeWidget->insertTopLevelItems(0, items);

//展开
treeWidget->expandAll();

为节点添加CheckBox
为树节点添加CheckBox是比较简单的,只要设置了就可以展示出来
pItem1->setCheckState(0,Qt::Unchecked);
pItem2->setCheckState(0,Qt::PartiallyChecked);
pItem3->setCheckState(0,Qt::checked);

// 节点添加子节点
pItem->addChild(..);

//隐藏表头
表头是否需要,通过setHeaderHidden方法来控制隐藏:
setHeaderHidden(true)

// 清空原有数据
treeWidget->clear();

//收缩
treeWidget->collapseAll();

九、QTreeView控件

槽函数:

void collapse(const QModelIndex &index)
void collapseAll()
void expand(const QModelIndex &index)
void expandAll()
void expandToDepth(int depth)
void hideColumn(int column)
void resizeColumnToContents(int column)
void showColumn(int column)
信号函数:
void collapsed(const QModelIndex &index)
void expanded(const QModelIndex &index)

model
QT提供了一些现成的models用于处理数据项:
QStringListModel 用于存储简单的QString列表。
QStandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据。
QDirModel提供本地文件系统中的文件与目录信息。 QSqlQueryModel,QSqlTableModel,QSqlRelationTableModel用来访问数据库。

说明:要使一个QTreeView能够显示数据,需要构造一个model并设置给QTreeView,Qt提供了一些相关类型的Model,
其中最常用的就是这个QStandardItemModel类,基本上可以满足大部分需求。表头的内容同时也由这个model管理,
setHorizontalHeaderLabels 函数可以设置共有多少列、每列文字。第一级节点直接使用 appendRow方法添
加到model上,次级节点则是添加到第一个父级节点上,依次构成父子关系树。

简单方法:

void MainWindow::InitCurrentTree()
{
    //1,构造Model,这里示例具有3层关系的model构造过程
    QStandardItemModel* model = new QStandardItemModel(ui->treeView);
    model->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("序号") << QStringLiteral("名称"));     //设置列头
    for(int i=0;i<10;i++)
    {
        //一级节点,加入mModel
        QList<QStandardItem*> items1;
        QStandardItem* item1 = new QStandardItem(QString::number(i));
        QStandardItem* item2 = new QStandardItem(QStringLiteral("第一级节点"));
        items1.append(item1);
        items1.append(item2);
        model->appendRow(items1);
 
        for(int j=0;j<10;j++)
        {
            //二级节点
            QList<QStandardItem*> items2;
            QStandardItem* item3 = new QStandardItem(QString::number(j));
            QStandardItem* item4 = new QStandardItem(QStringLiteral("第二级节点"));
            items2.append(item3);
            items2.append(item4);
            item1->appendRow(items2);
        }
    }
    //2,给QTreeView应用model
    ui->treeView->setModel(model);
}

十、QTableWidget控件

信号函数:
void cellActivated(int row, int column)
void cellChanged(int row, int column)
void cellClicked(int row, int column)
void cellDoubleClicked(int row, int column)
void cellEntered(int row, int column)
void cellPressed(int row, int column)
void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
void itemActivated(QTableWidgetItem *item)
void itemChanged(QTableWidgetItem *item)
void itemClicked(QTableWidgetItem *item)
void itemDoubleClicked(QTableWidgetItem *item)
void itemEntered(QTableWidgetItem *item)
void itemPressed(QTableWidgetItem *item)
void itemSelectionChanged()

槽函数:

void clear()
void clearContents()
void insertColumn(int column)
void insertRow(int row)
void removeColumn(int column)
void removeRow(int row)
void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)

简单用法:

 QTableWidget *tableWidget = new QTableWidget;
 tableWidget->setRowCount(8); //设置行数为10
 tableWidget->setColumnCount(4); //设置列数为5
 tableWidget->resize(450, 200); //设置表格
 QStringList header;
 header<<"ID"<<"Name";
 tableWidget->setHorizontalHeaderLabels(header);
 tableWidget->setItem(0,0,new QTableWidgetItem("0001"));
 tableWidget->setItem(1,0,new QTableWidgetItem("0002"));
 tableWidget->setItem(2,0,new QTableWidgetItem("0003"));

 tableWidget->setItem(0,1,new QTableWidgetItem(QIcon(":/Image/month.png"), "John"));
 tableWidget->setItem(1,1,new QTableWidgetItem(QIcon(":/Image/month.png"), "Tom"));
 tableWidget->setItem(2,1,new QTableWidgetItem(QIcon(":/Image/month.png"), "Lucy"));

合并单元格效果的实现:
tableWidget->setSpan(0, 0, 3, 1)

匹配行和列的大小设为与内容
tableWidget->resizeColumnsToContents(); 
tableWidget->resizeRowsToContents(); 

设置表格为整行选择
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //整行选中的方式

猜你喜欢

转载自blog.csdn.net/leiyang2014/article/details/115435468