基础控件

2025-04-26  本文已影响0人  xqiiitan

系统菜单

// QMenu/statusbar only have 1; toolbar/dockWidget have n,
工具栏,Toolbar可拖动。可跟菜单里面内容,响应同一个事件。
浮动串口:Dock Widget, 能拖动出来,模态动画框,里面可以放控件。
状态栏

资源/resource.qrc

资源文件前缀 / ,前缀可以将图片分成一部分一部分。
将图片文件夹Image/**.png 全部拷贝到代码中,全部添加到.qrc中。
ui->actionSave_as->setIcon(QIcon(":/Image/face.png"));

ui编辑页面,Sianals & Slots 可以再UI中添加信号槽。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // QMenu/statusbar only have 1; toolbar have n, dockWidget have n,
    //寻找QAction对象,响应菜单点击事件 File-> Open/New/Close
    connect(ui->actionOpen, &QAction::triggered, this, [=]{
        //QString fileName = QFileDialog::getOpenFileName();
        QString fileName = QFileDialog::getOpenFileName(this,"打开文件", "/home/k2");
        //列出绝对路径
        qDebug() << fileName.toUtf8().data() << "++++++++click open menu";
    });
    //bottom 状态栏
    QPushButton* button = new QPushButton("HelloBtn", this);
    ui->statusbar->addWidget(button);
    QLabel *label = new QLabel("Label", this);
    ui->statusbar->addWidget(label);
}

对话框QDialog 对话框类, QWidget,QMainWindow

非模态对话框:弹出后,可以操作后面UI内容。
模态对话框: 弹出后,不能称作后面内容。 阻塞对话框。

QDialog dlg(this);
dlg.exec(); // 模态对话框(阻塞)
dlg.show(); // 非阻塞

QDialog *dlg = new QDialog(this);
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->show();

提示对话框 QMessageBox

都是模态对话框(阻塞)

QMessageBox::about(this, "About", "++++++");
//多个按钮,点选按钮回调。
if(QMessageBox::Ok == QMessageBox::critical(this, "error", "++++++",
                       QMessageBox::Ok | QMessageBox::Cancel)){
    qDebug() << "click ok";
}
// 有默认选中按钮的 
QMessageBox::question(this, "error", "++++++",
    QMessageBox::Ok | QMessageBox::Cancel),  QMessageBox::Cancel)
//颜色对话框
QColor color = QColorDialog::getColor();
qDebug() << color.red() << color.green() << color.blue();

//字体对话框 QFontDialog
bool ok;
QFont font = QFontDialog::getFont(&ok, QFont("华文彩云"),this,"字体set");
qDebug() << font.family().toUtf8().data()<<font.italic()<<font.pointSize()<<font.bold();

布局(布局嵌套实现ui)

水平布局,垂直布局,网格布局GridLayout(使用登录页面用户名+密码输入)。
先添加一个Widget,一个容器,里面再添加子控件,选Widget,然后里面的子控件再水平布局。
Spacers 弹簧控件--占位使用。弹簧可动态设置在页面的固定位置上。

设置按钮大小,在属性中设置。

按钮控件

ui->pushButton.setText("abc");
QRadioButton 单选,成组使用。配合GroupBox使用。
QCheckBox 多选

connect(ui->radioButton, &RadioButton::released, this,={
QMessageBox::information(this,"radiobtn","clicked");
});
connect(ui->checkBox, &RadioButton::stateChanged, this,[=](int state){
QMessageBox::information(this,"checkBox",QString::number(state));
}); // state:选中2,不选中0.

// int 转QString:
QString::number(state)

QListWidget 列表显示内容

QListWidgetItem,
ui->listWidget->addItem(new QListWidgetItem(
QIcon("D:\lucy.png"),"lucy", ui->listWidget));

TableWidget 表格显示内容,带表头。中间有网格线。

//指定行数,指定列数。
ui->tableWidget->setColumnCount(3);
ui->tableWidget->setRowCount(30);
QStringList list;
list << "姓名" << "性别" << "年龄";
ui->TableWidget->setHorizontalHeaderLabels(list);

ScrollArea 上下滚动

ToolBox 可折叠列表

TabWidget 带标签的tab栏。

ComboBox 下拉选择框。

StackedWidget 通过左侧按钮列表点击,实现中间区域显示不同内容。

connect(ui->btnMusic,&QPushButton:clicked, this,[=](){
    ui->stackWidget->setCurrentIndex(0);    
});
connect(ui->btnVideo,&QPushButton:clicked, this,[=](){
    ui->stackWidget->setCurrentWidget(ui->video);   
});
connect(ui->btnOther,&QPushButton:clicked, this,[=](){
    ui->stackWidget->setCurrentIndex(2);    
});

QLabel 可以放文本,也可以放图片(静态图+动态图)。

Signals:
linkActivated()
link
// 加载resource.qrc 中的图片资源
//ui->image->setPixmap(QPixmap(":/Image/Luffy.png"));
// 加载动态图 gif
QMovie *movie = new Movie(":/Image/mario.gif");
ui->image->setMovie(movie);
movie->start();

// 程序很快被析构了,动画看不到。避免播放前就被释放了.
QMovie Movie(":/Image/mario.gif");
ui->image->setMovie(movie);
movie.start();

上一篇 下一篇

猜你喜欢

热点阅读