首页 > 编程语言 >Qt/C++开发经验小技巧281-285

Qt/C++开发经验小技巧281-285

时间:2023-08-23 12:15:11浏览次数:51  
标签:Qt tableView C++ debug mingw 选中 281 ui release

  1. 悬停窗体QDockWidget默认在标题栏右键会弹出悬停模块的显示隐藏菜单,如果需要去掉,会发现设置Qt::NoContextMenu或者事件过滤器拦截都是无效的,必须设置 dockWidget->setContextMenuPolicy(Qt::PreventContextMenu); 。

  2. Qt中的布局有个默认的margin边距值和spacing间距值,在没有设置该值的情况下,会根据运行的环境自动设置该值,比如1080P分辨率和2k分辨率的电脑,该值的默认值不一样,并不是你在UI设计的时候属性栏中看到的值,这个要特别注意,你看到的7可能在目标平台运行的时候是11,如果一定要按照你想要的值来运行,可以重新设置即可,设置过哪一个就该值按照设定的来。如果不想一个个设置调整布局中的间距边距,你需要用到万能大法样式代理,继承QProxyStyle类然后重新设置样式即可。该方式也是属于斗皇级别的UI外观控制策略,最终所有的qss样式也是要通过该样式去绘制的,意味着这里你可以重新定义和控制所有控件的外观样式,非常的强大。

//也可以继承Qt内置的样式比如 QFusionStyle/QCleanlooksStyle
class QCustomStyle : public QProxyStyle
{
public:
    int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const {

        if (metric == QStyle::PM_LayoutHorizontalSpacing || metric == QStyle::PM_LayoutVerticalSpacing) {
            //将布局中的横向和垂直间距设置成10
            return 10;
        } else if (metric == QStyle::PM_ButtonMargin) {
            //将所有按钮的margin边距设置成20
            return 20;
        }
        return QProxyStyle::pixelMetric(metric, option, widget);
    }
};

qApp->setStyle(new QCustomStyle);
  1. 养成良好的编程习惯至关重要,尤其是对变量的初始化,包括一些类对象的定义后也务必记得初始化,否则在不初始化的时候,默认值飘忽不定,比如int默认值在debug/release下以及不同编译器下默认值都不一样,甚至在头文件定义以及函数中定义都可能不同的默认值,下面表格中整理的测试的值,对应的int值飘忽不定的。常见的默认初始化定义建议 int i = 0; bool b = false; class a = NULL;
版本 定义位置 debug/release int bool
Qt4.7/mingw 头文件 debug 7077464 true
Qt4.7/mingw 头文件 release 48 true
Qt4.7/mingw 函数中 debug 2162216 false
Qt4.7/mingw 函数中 release 0 false
Qt5.7/msvc 头文件 debug -1 true
Qt5.7/msvc 头文件 release -1 true
Qt5.7/msvc 函数中 debug 1898108572 false
Qt5.7/msvc 函数中 release 18872512 true
Qt6.5/mingw 头文件 debug -1305540880 true
Qt6.5/mingw 头文件 release -1124044992 true
Qt6.5/mingw 函数中 debug 0 false
Qt6.5/mingw 函数中 release 0 false
  1. 对QTableView进行全部选中、全部不选、反向选中操作。
void frmXXX::initAction()
{
    QAction *actionAll = new QAction("全部选中");
    QAction *actionInvert = new QAction("反向选中");
    QAction *actionClear = new QAction("清空选中");
    connect(actionAll, SIGNAL(triggered(bool)), this, SLOT(doAction()));
    connect(actionInvert, SIGNAL(triggered(bool)), this, SLOT(doAction()));
    connect(actionClear, SIGNAL(triggered(bool)), this, SLOT(doAction()));

    ui->tableView->addAction(actionAll);
    ui->tableView->addAction(actionInvert);
    ui->tableView->addAction(actionClear);
    ui->tableView->setContextMenuPolicy(Qt::ActionsContextMenu);
}

void frmXXX::doAction()
{
    QAction *action = (QAction *)sender();
    QString text = action->text();
    if (text == "全部选中") {
        ui->tableView->selectAll();
    } else if (text == "反向选中") {
        //找到所有选中的行集合
        QList<int> rows;
        QModelIndexList list = ui->tableView->selectionModel()->selectedRows();
        int count = list.count();
        for (int i = 0; i < count; ++i) {
            rows << list.at(i).row();
        }

        //先清空所有选中
        ui->tableView->clearSelection();
        //不在选中行集合的则选中
        count = ui->tableView->model()->rowCount();
        for (int i = 0; i < count; ++i) {
            if (!rows.contains(i)) {
                ui->tableView->selectRow(i);
            }
        }
    } else if (text == "清空选中") {
        ui->tableView->clearSelection();
    }
}
  1. pro文件中多重条件判断,前面 ! 表示非,中间 | 表示或(两个条件满足其一),中间 :: 表示与(两个条件都要满足)。
//下面表示安卓或者ios平台
android|ios {}

//下面表示非安卓和ios平台
!android::!ios {}

国内站点:https://gitee.com/feiyangqingyun
国际站点:https://github.com/feiyangqingyun

标签:Qt,tableView,C++,debug,mingw,选中,281,ui,release
From: https://www.cnblogs.com/feiyangqingyun/p/17650842.html

相关文章

  • error LNK2019: 无法解析的外部符号 (VS2022创建QT文件)
    运行过程中,编译没有问题,但是在输出会显示以下问题 同时出现errorLNK2001、2019、1120,查询网上一些资料得知是链接过程中出现错误:属于的类型是包含符号定义的目标文件或库未链接。由于使用VS2022上拓展的工具QTVSTools创建的QT文件,在使用以下两个头文件:#include"QtNetWor......
  • Qt Creator 11.0.2 设计器的智能化还有待提高
    QtCreator11.0.2设计器的智能化还有待提高在设计器中加入一个QComboBox,使用"转到槽.."时,选择信号activated时只出来一种定义,查QT帮助资料可以看到是应该有两种方式,两种方式的传参不一样,一个是int整数,一种是QString字符串,但这里只给出一种有点不人性化查看帮助 这里我们来验证......
  • Pybind11:使用C++编写Python模块
    放假摆了一周了。看论文实在不是什么有意思的活。这两天研究了一下Pybind11的用法。使用C/C++和Python混合编程的想法很早就有了,在大一的一次比赛时曾经实践过(虽然不是我写的),当时获得了比较显著的性能提升。但是当时用的是Swig,据队友说Swig对于NumPy的支持极为阴间,当时调试花了好......
  • C++ LibCurl 库的使用方法
    LibCurl是一个开源的免费的多协议数据传输开源库,该框架具备跨平台性,开源免费,并提供了包括HTTP、FTP、SMTP、POP3等协议的功能,使用libcurl可以方便地进行网络数据传输操作,如发送HTTP请求、下载文件、发送电子邮件等。它被广泛应用于各种网络应用开发中,特别是涉及到数据传输的场景。......
  • 1.C++入门以及简单顺序结构题目
    1.C++入门以及简单顺序结构题目1.交换值【题目描述】输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。【输入】输入两个正整数a和b。【输出】输出a与b交换值后的结果。【输入样例】23【输出样例】32inta=2,b=3,c;cin>>a>>b;c=a;a=b;b=c;cout<<a......
  • C++入门及简单程序结构题目
    C++入门及简单顺序结构题目1.交换值【题目描述】输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。【输入】输入两个正整数a和b。【输出】输出a与b交换值后的结果。【输入样例】23【输出样例】32inta,b,c;cin>>a>>b;c=a;a=b;b=c;printf("%d%d",......
  • 1.C++入门以及简单顺序结构题目
    1.C++入门以及简单顺序结构题目™1.交换值【题目描述】输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。【输入】输入两个正整数a和b。【输出】输出a与b交换值后的结果。【输入样例】23【输出样例】32inta,b;cin>>a>>b;printf("%d%d",b,a);2.整......
  • 如何配置VScode的C++环境
    你需要:VScodeMinGW没了安装VScode在VScode官网下载VScode。打开VScode,点击扩展,输入Chinese,下载Chinese(Simplified)(简体中文)LanguagePackforVisualStudioCode,安装中文包并重启。MinGW在MinGW官网下载MinGW。下载x86_64-posix-sjlj压缩包速度快,解压到......
  • C++函数重载、默认形参
    一、函数重载1、什么是函数重载?在同一作用域下,函数名相同,参数列表不同的函数构成重载关系函数重载与返回值类型、参数名无关与作用域是否相同,以及参数列表的数量、参数类型、常属性不同等有关2、C++是如何实现函数重载的?通过g++-S生成汇编代码可知,编译器会把函数的参数类......
  • QT将资源打包为外部资源文件进行引用
    QT将资源打包为外部资源文件进行引用将资源打包为外部资源文件进行引用,这样能减少可执行程序exe的大小,在调试运行时需要将相应的rcc复制到对应的Debug或release目录下,否则会加载不了资源对应的qrc应该类似于myres.qrc<RCC><qresourceprefix="/"><file>res/img_bg_level_1.jpg</......