Qt基本控件使用

Qt基本控件详解(一) Qt中有六种按钮组件, 分别是按压按钮QPushButton、工具按钮QToolButton、单选按钮QRadioButton、多选按钮QCheckBox、命令链接按钮QCommandLinkButton、按钮盒QButtonBox。在Qt中与程序相关的资源在被指定在qrc文件中,qrc文件中包含程序中需要使用 的资源以及资源的路径。QCheckBox复选项按钮, 状态分为选中和未选中,复选框一般用于在多个中选择多个。pushButton是Qt中最常用的按钮,主要使用的函数为以下几个。 阅读详情

Qt基本控件及三大布局

Qt基本模块
一、Qt的三大布局

QHBoxLayout: 
    水平显示布局,所有在其上面摆放的控件只能水平排列下去;
QVBoxLayout: 
    垂直显示布局,所有在其上面摆放的控件只能垂直排列下去;
QGridLayout 
    格子显示布局,可以按照表格的形式显示布局;

二、Qt的控件

label:标签,可以显示文本信息,只读;
pushbutton : 普通按钮;
radiobutton : 单选按钮,多个单选按钮中只能选择一个,但是必须放入groupbox中,类似单选题;
checkbox : 多选复选按钮,可以选择同时选择多个,类似多选题;
lineedit : 单行文本编辑框,可以输入单行文本;
textedit : 多行文本输入框,可以输入显示多行文本和图片;
combobox : 下拉文本输入框,在输入框的最右边有个三角下拉按钮,可以选择输入,也可以手动输入;
textbrower : 多行文本显示框,只读;
groupbox : 可以在里面放入特点的东西,统一管理;
slider : 模拟显示滑动条;
spinbox : 数值显示滑动条;
dateedit :
timeedit :
datetimeedit :
lcdnumber :

三、Qt的信号槽

在Qt中所有的对象(继承QObject类)都有connect函数,只要有这个函数就能建立信号槽(通过触发某个控件的信号函数,执行槽中相应的函数);(暂时这样理解,还是有点理解不全面的,之后学习到再来修改);
在Qt中信号槽中可以使用自带的函数,四个参数;也可以执行自定义的函数,三个参数;具体看下面test4的例子就明白了。

#include <QtWidgets/QApplication>
#include <QtCore/qdebug.h>
#include <QtWidgets/qcompleter.h>
#include <QtWidgets/qlineedit.h>
#include <QtWidgets/qlabel.h>
#include <QtWidgets/qcombobox.h>
#include <QtWidgets/qcheckbox.h>
#include <QtWidgets/qradiobutton.h>
#include <QtWidgets/qtextedit.h>
#include <QtWidgets/qtextbrowser.h>
#include <QtWidgets/qgroupbox.h>
#include <QtWidgets/qslider.h>
#include <QtWidgets/qspinbox.h>
#include <QtWidgets/qdatetimeedit.h>
#include <QtWidgets/qtabwidget.h>
#include <QtWidgets/qlcdnumber.h>
#include <QtGui/qpixmap.h>
#include <QtCore/qobject.h>
#include <QtWidgets/qboxlayout.h>
#include <QtWidgets/qpushbutton.h>
#include “MyWidgetEvent.h”

void test() ;

int main(int argc, char *argv[]) {

QApplication a(argc, argv);

test() ;

return a.exec();

}

void test(){

}

void test5ManyKongJian() {

QWidget *nanWidget = new QWidget() ;
QVBoxLayout *nanVLayout = new QVBoxLayout() ;

/*
**测试label控件
*/
QLabel *label=nullptr ;
nanVLayout->addWidget( label = new QLabel("<a href=www.baidu.com>baidu</a>") ) ;
//QPixmap me("./me.png") ;
//label->setPixmap( me ) ;//问题:链接和图片重复了,怎么分开
label->setWordWrap( true ) ;
label->adjustSize() ;
nanVLayout->connect( label , &QLabel::linkActivated , []( QString str){
    qDebug()<<str ;
} ) ;
/*
**测试lineedit控件
*/
QLineEdit *lineEdit ;
nanVLayout->addWidget( lineEdit = new QLineEdit("hello") ) ;
/*
**测试button控件
*/
QPushButton *button ;
nanVLayout->addWidget( button = new QPushButton("???") ) ;
button->setStyleSheet("QPushButton {font:bold 16px; color:red;padding:5px}") ;
nanWidget->connect( button , &QPushButton::clicked , [](bool flag){
    qDebug()<< "button" ;
}) ;
/*
**测试radiobutton控件
*/
QRadioButton *radioButton ;
nanVLayout->addWidget( radioButton = new QRadioButton("qradiobutton") ) ;
radioButton->setStyleSheet("QRadioButton {font:bold  16px;color:blue;padding:5px}") ;
radioButton->connect( radioButton , &QRadioButton::clicked , [](bool flag){
    qDebug()<< flag ;
}) ;
/*
**测试ckeckbox控件
*/
QCheckBox *check ;
nanVLayout->addWidget( check = new QCheckBox("chekcbox") ) ;
/*
**测试combobox控件
*/
QComboBox *combobox ;
nanVLayout->addWidget( combobox = new QComboBox() ) ;
combobox->addItem("select item1") ;
combobox->addItem("select item2") ;
combobox->addItem("...  ...") ;
combobox->setEditable(true) ;
lineEdit->setText("start") ;
combobox->connect( combobox , SIGNAL(activated(const QString &)) , lineEdit , SLOT(setText(const QString &)) ) ;//这里的下标要跟着显示
combobox->setCompleter( new QCompleter(combobox->model()) ) ;
/*
**测试textedit
*/
QTextEdit *textEdit ;
nanVLayout->addWidget( textEdit = new QTextEdit("textedit") ) ;
textEdit->setText("<table border=2> "
                "<tr><td>good</td><td>good</td><td>good</td></tr>"
                "<tr><td>nice</td><td>nice</td><td>nice</td></tr>"
                "</table>"
                "<img src=./me.png></img>") ;
textEdit->connect( textEdit , &QTextEdit::textChanged,[&](){
    //问题:textEdit->toPlainText() ;怎么才能获取到textEdit的实体,this->sender()
    //QTextEdit _edit = (QTextEdit *)QObject::sender();
    qDebug()<<textEdit->toPlainText() ;
}) ;
textEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded) ;
textEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn) ;
/*
**测试groupbox控件
*/
QGroupBox *groupBox ;
nanVLayout->addWidget( groupBox = new QGroupBox("groupbox") ) ;
QHBoxLayout *hLayout ;
groupBox->setLayout( hLayout = new QHBoxLayout() ) ;
hLayout->addWidget( new QRadioButton("boy") ) ;
hLayout->addWidget( new QRadioButton("girl") ) ;
/*
**测试模拟显示条slider
*/
QSlider *slider ;
nanVLayout->addWidget( slider = new QSlider() ) ;
slider->setMinimum( -100 ) ;
slider->setMaximum( 100 ) ;
/*
**测试数字显示条
*/
QSpinBox *spinBox ;
nanVLayout->addWidget( spinBox = new QSpinBox() ) ;
spinBox->setMinimum( -100 ) ;
spinBox->setMaximum( 100 ) ;
slider->connect( slider , SIGNAL(valueChanged(int)) , spinBox , SLOT(setValue(int)) ) ;
spinBox->connect( spinBox , SIGNAL(valueChanged(int)) , slider , SLOT(setValue(int)) ) ;
/*
**测试时间设置
*/
nanVLayout->addWidget( new QDateTimeEdit() ) ;
/*
**测试显示时间,只读
*/
QLCDNumber *number ;
nanVLayout->addWidget( number = new QLCDNumber() ) ;
number->display("1314") ;
number->setMode(QLCDNumber::Hex) ;
number->setSegmentStyle(QLCDNumber::Filled) ;

nanWidget->setLayout( nanVLayout ) ;
nanWidget->setWindowTitle("control") ;
nanWidget->show() ;

}

void test4GridAndHBox() {

QWidget *nanWidget = new QWidget() ;
QGridLayout *nanGridLayout = new QGridLayout() ;
QHBoxLayout *nanHBoxLayout = new QHBoxLayout() ;

nanGridLayout->addWidget( new QLabel("Username") , 1 , 1 ) ;
nanGridLayout->addWidget( new QLineEdit() , 1 , 2 ) ;
nanGridLayout->addWidget( new QLabel("Username") , 2 , 1 ) ;
nanGridLayout->addWidget( new QLineEdit() , 2 , 2 ) ;
nanGridLayout->addLayout( nanHBoxLayout , 3 , 2 ) ;

nanHBoxLayout->addStretch(1) ;
nanHBoxLayout->addWidget( new QPushButton("Login") , 1 ) ;

nanWidget->setLayout( nanGridLayout ) ;
nanWidget->show() ;

}

void test3GridLayout() {

QWidget *nanWidget = new QWidget() ;
QGridLayout *nanLayout = new QGridLayout() ;
QPushButton *nanButton = new QPushButton() ;
QLineEdit *nanLineEdit = new QLineEdit() ;

nanLayout->addWidget( nanLineEdit , 1 , 1 , 1 , 2 ) ;
nanLayout->addWidget( new QPushButton , 1, 3 ) ;
nanLayout->addWidget( new QLineEdit , 2, 1 , 2 , 1  ) ; 
nanLayout->addWidget( new QPushButton , 2, 2 ) ;
nanLayout->addWidget( new QPushButton , 2, 3 ) ;
nanLayout->addWidget( nanButton , 3 , 3 ) ;
nanLayout->setColumnStretch( 1 , 1 ) ;
nanLayout->setColumnStretch( 2 , 1 ) ;/*设置每列的比重*/
nanLayout->setColumnStretch( 3 , 1 ) ;

nanWidget->setLayout( nanLayout ) ;
nanWidget->show() ;

}

void test2HBoxLayout() {

QWidget *nanQWidget = new QWidget() ;

QLineEdit *nanQLineEdit = new QLineEdit() ;

QHBoxLayout *nanHLayout = new QHBoxLayout() ;
nanHLayout->addWidget( nanQLineEdit , 1 ) ;
//添加,两个控件之间的距离addspaceing,两个控件在layout中的比重addstretch

nanQWidget->setLayout( nanHLayout ) ;
nanQWidget->show() ;

}

void test1(){

QWidget *w  = new QWidget ;
QVBoxLayout *vLayout = new QVBoxLayout( ) ;
QPushButton *nanButton ;
QLineEdit *nanLineEdit ;
QLabel *nanLabel ;
QString content("null") ;
QCompleter nanQCompleter( QStringList()<<"nich"<<"chen"<<"good") ;

vLayout->addWidget( nanLineEdit = new QLineEdit()  ) ;
vLayout->addWidget( nanButton = new QPushButton("right") ) ;
nanQCompleter.setFilterMode( Qt::MatchFlag::MatchContains ) ;
nanLineEdit->setCompleter( &nanQCompleter ) ;
nanLineEdit->setPlaceholderText( "Please input your name" ) ;
vLayout->addWidget(  nanLabel = new QLabel() ) ;
nanLabel->setText( content ) ;
w->connect( nanButton , &QPushButton::clicked , [&](){
    nanLabel->setText( nanLineEdit->text() ) ;
} ) ;

w->setLayout( vLayout) ;
w->show() ;

}

一、dialog、widget、mainwindow的区别

1)、dialog有exec函数,如果是dialog窗口,后边的窗口时不可选的; 
2)、widget和dialog都有show函数,如果通过这个函数显示这两种类型的窗口,则两个窗口都是可选的; 
3)、widget主要是在上面放置布局和控件; 
4)、mainwindow可以显示菜单,工具栏,状态栏、托盘等功能。

二、dialog窗口

这个dialog窗口只是为了给人们提供更好的可视化操作,但是对于程序员而言,这个操作并不是立刻执行的;而是当在窗口选择关闭后,才将选择的结果返回给后台,后台才可以根据选择的结果进行相应的操作。

#include “mydialog.h”

mydialog::mydialog(QDialog *parent):QDialog(parent) {

QPushButton *button = new QPushButton( "button" , this ) ;
connect( button , SIGNAL(clicked()) , this , SLOT(slotButtonClick()) ) ;

}

void mydialog::slotButtonClick() {

#if 0
/dialog和widget的区别,exec和show的区别而已/
QDialog *dlg = new QDialog ;
QPushButton *button = new QPushButton(“close” , dlg ) ;
connect( button , SIGNAL(clicked()) , dlg , SLOT(reject()) ) ;
int ret = dlg->exec( ) ;
//通过exec显示出来的窗口称为,模块对话框
// 在模块对话框中,exec有自己的消息循环,并且把app的消息循环接管了
// 如果Dialog是通过exec来显示,那么可以通过accept或者reject来关闭窗口
// 如果Dialog是通过show来显示,那么可以通过close来关闭窗口,这个和QWidget一样的

// 有许多特殊的dailog:文件选择,MessageBox,颜色选择,字体选择,打印预览,打印
if( ret == QDialog::Accepted ) 
    qDebug()<<"accepted" ;
else if( ret== QDialog::Rejected ) 
    qDebug()<<"rejected" ;

#endif
#if 0
/文件选择:这个窗口可以选择保存文件的名称,然后将路径+名称返回,我们就可以根据返回路径名来保存文件。/
QString strFilename = QFileDialog::getSaveFileName(NULL,
“Select file for save”,
_strDir,
“pic file (*.png .jpg)");
#endif
#if 0
/文件选择:选择要打开的文件名(绝对路劲);我们就可以根据这个文件路径来打开相应的文件/
QString strFilename = QFileDialog::getOpenFileName(NULL,
“Select file for open”,
_strDir,
"pic file (
.png *.jpg)”);
#endif
#if 0
QString strFilename = QFileDialog::getExistingDirectory();

if(strFilename.isEmpty())
{
    qDebug() << "select none";
    return;
}

qDebug() << strFilename;
QFileInfo fileInfo(strFilename);
_strDir = fileInfo.filePath();
qDebug() << _strDir;

#endif
//do something for io … …
//上面的选择将绝对路径名都给拿下来了,如果要进行保存,不是很容易吗!
QPixmap pixmap(this->size()) ;
QPainter painter(&pixmap) ;
this->render( &painter ) ;
pixmap.save(strFilename) ;
#if 0
/颜色选择对话框:可以选择相应的颜色;然后将选择的颜色返回,这样我们就可以操作了/
QColorDialog colorDia ;
colorDia.exec() ;
QColor c = colorDia.selectedColor() ;
#endif
#if 0
/字体选择对话框:可以选择字体;然后将选择的字体信息返回,我们同样可以用这些信息来设置相应的值/
QFontDialog fontDia ;
fontDia.exec() ;
QFont font = fontDia.selectedFont() ;
#endif
#if 0
/这个也是弹窗对话框,不过只是简单的选择以下枚举中的值,可以尝试下效果/
int ret = QMessageBox::question(this, “???”, “realy do …”,
QMessageBox::Yes| QMessageBox::No|
QMessageBox::YesAll| QMessageBox::NoAll);
if(ret == QMessageBox::Yes)
{
qDebug() << “user select yes”;
}
if(ret == QMessageBox::No)
{
qDebug() << “user select no”;
}
#endif
}

void mydialog::paintEvent( QPaintEvent *ev ) {
}

mydialog::~mydialog(void) { }

三、widget窗口

前面已经介绍过很多继承这个窗口的控件了,这里就不再累述。

四、mainWindow窗口

这个也是给人们提供更好的可视化操作; 
一个正常window软件呈现给客户的可视化界面; 
包括:menu菜单、tool工具栏、status状态栏、电脑显示屏右下脚的托盘等。

#include “MyWindow.h”

MyWindow::MyWindow(QMainWindow *parent):QMainWindow( parent ) {

/*menuBar菜单栏,菜单menu*/
QMenuBar  *menuBar = this->menuBar() ;
_menu = menuBar->addMenu( "&File" ) ;
QMenu *edit = menuBar->addMenu( "&Edit" ) ;

/*menu菜单中的选项action*/
QAction *openAction = _menu->addAction( "&Open"
    , this , SLOT(slotOpen()) , QKeySequence::Open  ) ;
QAction *saveAction = _menu->addAction( "&Save"
    , this , SLOT(slotOpen()) , QKeySequence::Save  ) ;
_menu->addSeparator() ;//添加分界线
QAction *closeAction = _menu->addAction( "&Exit"
    , this , SLOT(close()) , QKeySequence::Close  ) ;

/*toolBar工具栏*/
QToolBar *toolBar = this->addToolBar( "mimi" ) ;
toolBar->addAction( openAction ) ;
toolBar->addAction( saveAction ) ;
toolBar->addAction( closeAction ) ;
/*statusBar状态栏*/
QStatusBar *statusBar = this->statusBar() ;
QLabel *label ;
statusBar->addWidget( label = new QLabel("Ok") ) ;
label->setText( "<font color=blue>XXXXX... ...</font>" ) ;
/*上面的三种栏介绍完之后,剩下的窗口区域就是CentralWidget
**如果将widget直接add到mainwindow这个窗口的话,
**toolbar是会跟添加进来的widget重叠的*/
MyView *view = new MyView ;
this->setCentralWidget( view ) ;
/*最后就是window系统右下脚的托盘:system tray icon*/
QSystemTrayIcon *icon = new QSystemTrayIcon ;
icon->setIcon( QIcon("./1.png") ) ;//图标
icon->setToolTip( "luck dog" ) ;//鼠标滑过提示文字
icon->show() ;//展示在右下角
icon->setContextMenu( _menu ) ;//右击出现的菜单
this->connect( icon , SIGNAL( slotActivated(QSystemTrayIcon::ActivationReason) ) 
    , this , SLOT(slotActivated(QSystemTrayIcon::QSystemTrayIcon::ActivationReason)) ) ;
this->installEventFilter(this);

}

void MyWindow::slotActivated(QSystemTrayIcon::ActivationReason reason){

/*这个没成功*/
if( reason==QSystemTrayIcon::Trigger ) {
    if( this->isHidden() ) 
        this->show() ;
    else
        this->hide() ;
}

}

bool MyWindow::eventFilter(QObject *o, QEvent e)
{
/实现什么功能呢?/
if(o == (QObject
)this && e->type() == QEvent::Close)
{
return true;
}

return QMainWindow::eventFilter(o, e);

}

void MyWindow::slotOpen() {

QString fileName = QFileDialog::getOpenFileName() ;
qDebug()<<fileName ;
/*将打开的文件中的内容显示在窗口上... ...*/

}
bool MyWindow::event(QEvent *ev)
{
qDebug() << ev;
if(ev->type() == QEvent::Close) {
return false;
}
/怎么弄才能实现窗口关闭,托盘还在?/
return QMainWindow::event(ev);
}

void MyWindow::paintEvent( QPaintEvent * ) {

QPainter painter(this) ;
painter.drawPixmap( QPoint(0,0) , QPixmap("./1.png") ) ;

}

void MyWindow::mousePressEvent( QMouseEvent *ev ) {

if( ev->button() == Qt::RightButton ) {
    _menu->exec( QCursor::pos() ) ;
}

}

MyWindow::~MyWindow(void) { }

一、qDebug()函数

qDebug()函数可以直接输出调试错误信息,方便程序员调试信息,查找错误;
例子:qDebug()<<"error"<<endl;

二、QDebug类

这个函数可以收集错误信息,通过QTextStream这个类(之前在写文件的时候,用过这个类,查看了下函数的作用,果真和自己想的一样);
QTextStream类,指定一个Qfile*或是QString*作为参数,重载了<<操作符,将对象(QTextStream<<。。)收集到的数据都保存入,相应的参数(这个参数由构造函数决定)中,方便统一管理。例如:在构造时如果指定了文件指针,就直接保存如文件;在构造时如果指定了string,就直接保存如string中… …
总结:这个错误类不是用来输出信息的(当然简介使用错误函数也是可以输出信息),更重要的是用来收集错误信息,方便统一管理,保存,查看的。

QString *str ;
QDebug q( str = new QString("object") ) ;
q<<"nice";
qDebug()<< *str ;

1、按钮控件:QPushButton

1)新建:

QPushButton *btn = new QPushButton(“这是按钮”); //也可指定父窗口,一般默认为本窗口

2)设置固定大小:即即使窗口的大小发生变化,按钮控件的大小始终保持在固定大小,

btn->setFixedSize(100,200); //设置按钮的大小为100 x 200

3)设置背景图片:a) 首先需要添加图片:右键点击工程,选择“添加新文件”->“Qt Resource File”,点击“choose”,会出现如下图所示界面:

在该界面中,点击“添加”->“添加前缀”,然后再点击“添加”->“添加文件”,选择要添加的图片即可(.png)格式,如下图所示:

当添加完图片之后,就可以通过StyleSheet来设置背景图片了:

btn->setStyleSheet(“background-image:url(:/new/icon/res/SimStart.png)”); //其中,url即为在资源文件中所在的位置

4)设置提示文字:当鼠标停在控件上时,会弹出提示文字:

btn->setToolTip(“这是一个按钮”);

2、文本框控件:QTextEdit

1)新建:

QTextEdit *textEdit = new QTextEdit();

2)显示多行数据:

textEdit->insertPlainText(“显示信息”+"\n"); //当显示完信息之后,会换行

3、时间控件:QDateTime

1)获取时间:

QDateTime *currentTime = new QDateTime(QDateTime::currentDateTime());

2)显示时间:

QString currentTimeStr = currentTime->time().toString();

4、表格控件:QTableWidget

1)新建:

QTableWidget table = new QTableWidget(20,3); //建立了一个203的表格

2)设置表头:

QStringList tableHeader;
tableHeader << "列1" << "列2" << "列3";
table->setHorizontalHeaderLabels(tableHeader);

3)去掉自带的行号:

QHeaderView *headerViewRow = table->verticalHeader();
headerViewRow->setHidden(true);

4)使表格的宽度自适应表格控件的宽度:

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //设置表格填充控件
table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); //其中函数中的第一个参数是用于指定某一列的宽度自适应内容,
 
//上面两个可以一起使用

5)操作表格内容:

/****** 插入一行数据 *******/
item_0 = QTableWidgetItem("Text1")
item_2 = QTableWidgetItem("Text2")
 
table->setItem(0, 0, item_0);    //插入第0行,第0列单元格的数据
table->setItem(0, 1, item_1);    //插入第0行,第1列单元格的数据
 
/****** 获取一行数据 *******/
item_0 = table->item(0, 0);
item_1 = table->item(0, 1);
 
text0 = item_0->text();        //获取第0行,第0列单元格的数据
text1 = item_1->text();        //获取第0行,第1列单元格的数据
 
/****** 删除一行数据 *******/
table->removeRow(0);            //删除第0行所有的数据
 
/****** 插入一行数据 *******/
table->insertRow(1);            //在第1行位置,插入一行
 
/****** 清空表格中所有数据 *******/
table->clearContents();

5、树控件:QTreeWidget

1)新建:

QTreeWidget *tree = new QTreeWidget(*parent);    //可以指定父控件,
tree->clear();    //初始化树

2)设置树的标题:

tree->setHeaderLabel(“这是树”); //当然也可以隐藏树的标题

3)建立树的节点:

QTreeWidgetItem *rootItem = new QTreeWidgetItem(tree);    //添加节点,其中参数表示该节点的父节点
rootItem ->setText(0, fedFileNameStr);    //设置该节点的名称
rootItem ->setWhatsThis(0, IS_ROOT);    //设置该节点的识别码,即What This Is? 可以通过该识别码判断节点是哪一类型的
rootItem ->setExpanded(true);                //设置自动展开

4)添加右键点击事件:

tree->setContextMenuPolicy(Qt::CustomContextMenu);  //必须要加,否则右键点击弹出菜单无反应
connect(tree,SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(SlotToClickRightItem(QPoint)));
 
//其中,SlotToClickRightItem(QPoint)为右键点击响应函数
currentTreeItem = tree->itemAt(clickPos);    //通过点击的位置判断点击的是树的哪一个节点,如果currentTreeItem 为空,则表示点击在空白处
 
//点击空白处,弹出右键菜单
QMenu *menuNewFed = new QMenu(this);    //创建菜单
menuNewFed->addAction(actNewFed);    //添加菜单项
menuNewFed->exec(QCursor::pos());    //将弹出菜单显示在鼠标点击处

5)添加左键点击事件:

connect(tree,SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(SlotToClickTreeItem(QTreeWidgetItem*,int)));
 
//其中SlotToClickTreeItem(QTreeWidgetItem*,int))为左键点击响应函数,其中QTreeWidgetItem*参数表示的是点击的树的节点元素,
//int型参数表示树节点元素的列数,通过获取节点元素的whatThis(colum)来判断点击的是哪一种节点元素

6、LED控件控件:QLCDNumber

1)新建:

QLCDNumber *lcd = new QLCDNumber();

2)设置属性:

lcd ->setFixedHeight(23);                 //设置控件 lcd 的宽度为23(固定宽度)
lcd ->setSegmentStyle(QLCDNumber::Flat);  //只有当设置为 flat 风格时,设置颜色才会生效
lcd ->setStyleSheet("color:yellow; background:black;");

3)显示数字:

lcd->display(“display”); //需是数字类型的字符串

7、分割窗口:QSplitter

1)建立分割窗口:

//参数中,第一个参数表示分割窗口的方式,是水平分割还是垂直分割?第二个参数表示的是要被分割的窗口。
 
QSplitter *splitterMain = new QSplitter(Qt::Vertical, this);
splitterMain->addWidget(QWidget* widget);        //将控件 widget 添加到 splitterMain 分割窗口中//左中部分隔窗口
QSplitter *splitterLeftCenter = new QSplitter(Qt::Horizontal, splitterMain);
splitterLeftCenter->addWidget(QWidget* widget); //将控件 widget 添加到 splitterLeftCenter分割窗口中
 
//右中部分隔窗口
QSplitter *splitterRightCenter = new QSplitter(Qt::Vertical, splitterLeftCenter);
splitterRightCenter->addWidget(QWidget* widget); //将控件 widget 添加到 splitterRightCenter 分割窗口中
 
 //下部分隔窗口
QSplitter *splitterLeftDown = new QSplitter(Qt::Horizontal, splitterMain);
splitterLeftDown->addWidget(QWidget* widget); //将控件 widget 添加到 splitterLeftDown 分割窗口中

2)设置分割窗口的比例

//第一个参数表示的是分割窗口的ID,第二个窗口表示的是比例大小
 
splitterMain->setStretchFactor(0, 1);       //设定上、中、下三部分的比例为1:3:1
splitterMain->setStretchFactor(1, 3);
splitterMain->setStretchFactor(2, 1);
 
splitterLeftCenter->setStretchFactor(0, 2); //设定中间部分的左、右部分的比例为2:1
splitterLeftCenter->setStretchFactor(1, 2);

3)设置分割条是否可以拖动

//用于指定分隔条是否可以拖动,其中 handle(1) 表示第1条分隔条不可拖动
QSplitterHandle *splitterMainHandle = splitterMain->handle(1);
if(splitterMainHandle)
{
    //Disable the Middle Line, it can't adjust.
    splitterMainHandle->setDisabled(true);
}

4)设置分割条的样式

splitterMain->setStyleSheet("QSplitter::handle{background-color:white}");   //设置分割条样式
splitterMain->setHandleWidth(5);                                            //设置分割条宽度

5)设置分割窗口可变

//添加一个布局,使分隔窗口随着控件一起变化
mainLayout = new QGridLayout(this);
 
mainLayout->addWidget(splitterMain, 0, 0);

6)显示

//显示
splitterMain->show();

8、堆栈窗口:QStackedWidget

1)新建:

QStackedWidget *stackWindow = new QStackedWidget(this);

2)添加窗口:

stackWindow->addWidget(QWidget *widget); //其中widget表示建立的窗口控件

3)显示窗口:

stackWindow->setCurrentIndex(ID); //其中ID表示堆栈窗口中子窗口的ID号,ID号与添加子窗口的顺序有关,从0开始

9、标签控件:QLabel

1)、新建

QLabel* label = new QLabel("标签 ");

2)、设置字体

QFont font("Times", 20);    //第一个参数为字体格式,第二个参数为字体大小
label->setFont(font);

10、弹簧控件:QSpacerItem

现有一个见面如下所示:

想要变成这样:,即,前一个图虽然 setSpacing()了,但是在调整窗口代销时,还是会出现spacing发生变化并且不是很整齐的情况,这是就需要QSpacerItem控件了,该控件是不显示在窗口中的。

1)、新建

QSpacerItem* spacer = new QSpacerItem(20,20, QSizePolicy::Minimum, QSizePolicy::Expanding);

2)、设置

frameLayout->addWidget(label1); 
frameLayout->addWidget(text1);
frameLayout->addWidget(label2);
frameLayout->addWidget(text2);
frameLayout->addWidget(btn);
frameLayout->addSpacerItem(spacer);    //设置弹簧
qt基本控件使用 个人博客地址:http://wtqdreamer.top QPushButton使用 /********QPushButton使用**********/ btn_set = new QPushButton("开始",this); btn_set->setGeometry(QRect(10, 10, 50, 30)); connect(btn_set, SIGNAL(clicked()), this, SLOT(btn_text())); QLabel使用 /********QLabel使用 阅读详情

相关推荐

QT第四天(基础控件的使用)

QT控件的使用

open_python的博客 1725

QT教程:基本控件及相关类的介绍和使用

一、QString类: Qt提供了自己的字符串处理类,不用担心内存分配以及关于\0结尾的这些注意事项,QSting会自动对占用的内存进行扩充,链接非常的迅速 实例: QString str = "hello"; str += "world"; //拼接字符串操作 对象函数: str.append("hello"):在字符串末尾追加一个字符串,也是拼接动作 str.setNum(数值):将数值转为字符串存放 str.toLower():将字符串转为全小写并返回 str.toUpper(

Mr_zhang1911116的博客 3400

Qt 基本控件的使用

控件是界面设计的基本部件,也是各大Qt组件中最基本的功能。本文将通过代码讲解Qt中复选框、单选框、文本框、布局控件的使用。 首先创建一个名为dialog的QDialog项目。然后回自动生成dialog.h、dialog.c、main.c。 本文中的例子包括三个复选框的水平布局,并用复选框来设置文本框中文字的下划线、斜体、加粗功能;包括三个单选框的水平布局,并用单选框来设...

qq_30368685的博客 834

QT-基础控件

QT基础控件手写了解

qq_43279295的博客 1691

Qt 基本控件及大布局

以上只是一些 Qt 中常用的基本控件的示例,你可以根据自己的需求来使用和定制这些控件。Qt 是一种跨平台的应用程序开发框架,它提供了丰富的控件和布局来创建用户界面。在本文中,我们将介绍 Qt 中的一些基本控件和如何使用它们来构建大布局。在上面的示例中,我们创建了一个 QVBoxLayout 布局管理器,并将三个按钮添加到该布局中。然后,我们将布局设置为一个窗口的主布局,并显示该窗口。通过使用不同的布局管理器,你可以轻松地创建复杂的用户界面,并确保在不同的窗口大小和屏幕分辨率下保持良好的布局效果。

cl6789的博客 149

QT框架入门实战:从"hello_qt"到高级应用

本文还有配套的精品资源,点击获取 简介:QT是一个跨平台应用程序开发框架,广泛应用于各种设备。本课程设计项目以"hello_qt"小程序为起点,通过循序渐进的实战任务,帮助学生掌握QT框架的基本结构和操作方式,包括QT Creator、QT Widgets、信号与槽机制、元对象系统等关键知识点。学生将逐步深入学习QT的更多高级特性和功能,如网络通信、数据库访问、多线程编程等...

weixin_36123300的博客 571

Qt基本控件使用:按钮、标签、文本框等

摘要:本文介绍了Qt开发中常用的基础控件及其基本用法。主要内容包括:QLabel标签控件(文本/图片显示)、QPushButton按钮控件(点击事件、图标设置)、QLineEdit单行文本框(输入验证、密码模式)、QTextEdit多行文本框、QComboBox下拉列表框、QCheckBox复选框、QRadioButton单选按钮,以及QSpinBox数字选择框等。每个控件都给出了创建、属性设置和事件处理的代码示例,适合Qt初学者快速掌握界面开发的基本组件使用方法。

编程与实战的博客 809

​开源大模型实战:GLM-4.1V-Thinking本地部署教程(附API调用代码)

​在AI应用从“能用”向“好用”进阶的当下,​的需求愈发强烈:企业需保障数据安全(如医疗影像、金融报告不外传),开发者追求定制化能力(如微调模型适配垂直场景),科研团队则依赖离线环境处理敏感数据。智谱AI开源的​(10B级参数,支持图像、视频、文档多模态推理)凭借的优势,成为本地部署的热门选择。不过,对于“不想折腾技术”的普通用户或快速验证需求的团队而言,​,无需安装配置,打开即用,堪称“零门槛”体验的捷径。本文将分为两部分:先手把手教你​(适合有技术背景的用户),再对比介绍。

gogoMark的博客 1334

QT基本控件的使用

本文介绍了Qt框架中常用的UI控件分类与实现方法,主要包含五大类:1.布局控件(垂直/水平/网格/表单布局);2.按钮控件(普通/工具/单选/复选框等);3.列表视图控件(列表/树形/表格/列视图);4.容器控件(分组框/滚动区/工具箱);5.输入与显示控件(文本框/进度条/日历等)。每种控件都提供了头文件引用、基本代码实现和效果说明,涵盖了从基础布局到复杂交互的常见UI开发需求。文章最后对各类控件进行了功能总结,可作为Qt界面开发的快速参考手册。

一然明月的博客 1097

AnolisOS网卡驱动源码编译与安装实战指南

本文提供了一份详尽的AnolisOS网卡驱动源码编译与安装实战指南。针对系统自带通用驱动不兼容导致网络无法使用的问题,文章从环境准备、源码获取、编译安装到新旧驱动替换与持久化配置,一步步解析了如何通过源码编译安装官方驱动,解决硬件兼容性问题,并确保驱动在系统重启后自动生效。

weixin_28358083的博客 301

AI智能体安全沙箱agentguard:为LLM代码执行筑起防火墙

在AI应用开发领域,大语言模型(LLM)驱动的智能体(Agent)能够自动生成并执行代码,极大地提升了自动化能力。然而,赋予AI直接执行系统命令的权限也带来了显著的安全风险,如恶意代码注入、敏感数据泄露和系统资源滥用。为了解决这一核心矛盾,安全沙箱技术应运而生,它通过在不可信代码与宿主系统之间建立隔离层,实现"默认拒绝、最小权限"的安全原则。agentguard项目正是这一理念的工程实践,它结合白名单机制与容器化隔离,为AI智能体提供了可配置、可审计的安全执行环境。该方案不仅适用于内部自动化工具开发,也为构

weixin_28695537的博客 288

QT:基本控件的使用1

这个是书上的一个示例,有需要的可以去看看书,书上的案例挺全的。 效果展示: 1、选择文本框实例,可以打开文件目录,并将文件路径显示在文本框中; 2、点击颜色标准对话框实例,可打开一个Color插件,选择颜色,实现文本框的填充; 3、点击字体标准对话框按钮,打开字体插件,转换字体大小,可调整文本框中的“Hello World”; 4、点击标准输入对话框按钮,可查看信息科进行修改,如图2所示; 5、点击用户自定义消息对话框实例,程序会弹出对话框,如图3所示; 图1: 图2: 图3: 代

zq9955的博客 341

【接地系统篇】电力系统接地技术详解:从基本原理到实际应用

接地是为电流返回电源提供的一条低阻抗通道。简单来说,就是为故障电流修建一条"安全回家"的路,防止电流通过人体或其他不应带电的部件。接地系统选择原则安全性优先:TN-S系统安全性最高,适合重要场所经济性考虑:TN-C系统成本最低,适合一般工业连续性要求:IT系统供电连续性最好,适合特殊场所灵活性选择:TN-C-S系统兼顾经济与安全,应用最广。

2301_81299416的博客 2209

QPushButton的简单使用

Qt的基本控件接口 QPushButton的简单使用 Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); QPushButton *btn = new QPushButton;//创建按钮对象 //btn->show(...

weixin_42031299的博客 4817

Windows11 升级到24H2后,原本的protel99se软件的DDB图纸文件打不开解决办法

Windows11更新后无法打开DDB文件

xingchen2837的博客 393

MIL-STD-1553B协议解析与工程实践指南

MIL-STD-1553B作为军用航空电子系统的核心通信协议,采用命令/响应式串行总线架构,通过双冗余设计实现高可靠性数据传输。该协议定义了三类终端设备(总线控制器、远程终端、总线监视器)和六种标准消息格式,典型应用包括飞行控制系统、导航设备等关键航电组件的实时数据交互。深入解析模式代码机制和状态字位域定义,其中传输向量字(10000)和同步命令(00001)等关键指令在分布式系统时间对齐、故障诊断等场景发挥重要作用。工程实践中需特别注意78Ω终端阻抗匹配、4-12μs响应时间窗口等硬性指标,结合变压器耦合

weixin_33431149的博客 430

Qt第四章基本控件

QAbstractButton类实现了一个抽象按钮,并且让它的子类来指定如何处理用户的动作,并且指定如何绘制按钮QAbstractButton提供了点击和勾选按钮。QRadioButton和QCheakBoxl类只提供了勾选按钮QPushButton和QToolButton提供了点击按钮,如果需要的话,它们还可以提供切换行为、要子类化QAbstractButton,您至少必须重新实现paintEvent()来绘制按钮的轮廓极骑文本或像素图。

yerennuo的博客 744

ThingsBoard教程(一):ThingBoard介绍及安装

ThingsBoard介绍 最近看了很多开源的物联网的项目,其中有一个让我印象很深,那就是Thingsboard 下面我就给大家介绍一下这个项目,并指导大家如何在本地安装一个Thingsboard来体验它。 首先引用官网的项目介绍就是 一个开源的用于数据收集,处理,可视化和设备管理的开源物联网平台。 它通过行业标准的物联网协议(MQTT,CoAP和HTTP)实现设备连接,并支持云和本地部署。ThingsBoard结合了可伸缩性,容错性和性能,因此您永远不会丢失数据。 用它开源收集链接设备,收集设备的数据,

知无涯 2万+

Qt5 学习之路及嵌入式开发教程6:QMap类、QVariant类、基本控件

一、QMap、QHash类 1、语法及含义 QMap<Key,T>:表示一个从类型为Key的键到类型为T的值的映射。 例:QMap<“172025101”,“张三”>表示为学号为“172025101”对应的同学姓名为“张三”。 2、编程示例(单值输入) 在QMap中进行插入、遍历和修改 (1)、建立控制台程序 选择后,命名、两个下一步后点击完成。 ⑵、进...

fjqlldg的专栏 1248

ue 打包linux程序 在windows系统 2026

ue 打包linux程序 在windows系统 2026

jacke121的专栏 361

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Qt基本槽

声明位置:必须在类的slots关键字下声明(Qt 扩展语法),需包含 Qt 元对象系统支持(类声明中添加Q_OBJECT宏,并继承QObject或其子类)。访问权限:支持,分别表示可被外部 / 子类 / 内部关联的信号触发。示例:cpp运行Q_OBJECT // 必须添加,启用元对象系统public:public slots: // 公有的槽,可被外部信号关联// 响应按钮点击private slots: // 私有的槽,仅内部使用// 更新数据。

Luckxuan的博客 1063

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

qt布局控件叠在一起_Qt基本控件及三大布局

Qt基本控件及三大布局来源: http://blog.csdn.net/a2604539133/article/details/73920696Qt基本模块一、Qt的三大布局QHBoxLayout:水平显示布局,所有在其上面摆放的控件只能水平排列下去;QVBoxLayout:垂直显示布局,所有在其上面摆放的控件只能垂直排列下去;QGridLayout格子显示布局,可以按照表格的形式显示布局;二、Q...

weixin_42571280的博客 3916

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python编写qt界面的配置_Python用PyQt5设计界面篇,基本控件使用之QFontDialog控件详解...

前面内容,我们详细介绍了PyQt5的一些基本控件。回顾下精彩内容Python用PyQt5制作弹出式输入框,Qt图形界面编程之QInputDialog计数器QSpinBox使用详解,Python用PyQt5制作图形界面基础控件篇Python用PyQt5实现多种弹出消息框,QMessageBox控件使用详解Python用PyQt5设计省市县三级联动的下拉选框,QComboBox使用详解Python界面...

weixin_39629269的博客 495

Qt_第一天_基本控件接口_对象树_坐标系

基本控件接口 QPushButton *btn = new QPushButton; //按钮对象 //btn->show(); //如果是show函数,默认是用顶层方式弹出窗口 //而我们预期的效果是让按钮依附于myWidget窗口中 btn->setParent(this); //显示文本 btn->setText("杨...

qq_42230338的博客 594

Qt基本控件(二)

Qt基本控件(二) 1.Tab Widget 2.list Widget和tree Widget 每一项都是一个item 3.Table Widget 4.水平布局、垂直布局、打破布局 5.样式表 QPushButton:!hover{border-image:url(:/pic/pic/pause.png);} QPushButton:hover{border-image:url(:/pic/pic/pause_h.png);} 表示当鼠标移至该图案时显示某图片,当鼠标移开时显示另一个图片,

KeepStu的博客 232

QT 整个工程源码

QT 整个工程源码 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了QT基本控件使用相关的整个工程源码,包含对话框、菜单等基础功能实现。通过这个源码,您可以了解QT的基础使用和开发技巧。 简介 本源码旨在帮助开发者快速掌握QT开发中基本控件的应用,例如对话框和菜单等。源码结构清晰,注释详尽,便于学习和使用。 文件结构 . ├── main.cpp ├── mainwi...

gitblog_06786的博客 414
上一篇: 16进制与QByteArray互转
下一篇: Qt Creator 窗体控件自适应窗口大小布局
康闯
博客等级 码龄19年 420粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值