小编Wil*_*aft的帖子

Qmake可以接受自定义参数吗?

我一直在研究一个名为RoboJournal的程序,我正在尝试简化为Debian创建源程序包的过程.当用户在Linux上构建程序时,qmake将安装路径设置为/ usr/local/bin(对于用户编译的程序应该如此)但是,当我创建Debian源包时,这会导致问题,因为所有打包的可执行文件应该安装到/ usr/bin.

解决此问题的最简单方法是在创建源包之前手动编辑安装路径,但我更希望保持代码库相同(具有相同版本号的代码库的多个变体最终会导致问题).

如果软件包维护者可以运行类似于qmake --package robojournal.pro创建带有正确安装路径的makefile以进行打包的话,那就太棒了.同时,省略该--package参数仍然允许用户创建常规构建.

这个(或类似的东西)可以完成吗?我已经检查了qmake文档但是我没有发现配置项目文件以允许qmake接受自定义Unix风格的参数.

qt qmake

5
推荐指数
1
解决办法
3378
查看次数

摆脱QScrollArea中不必要的滚动条

我正在开发Configuration QDialog.它有几个类别(常规,外观等),当用户点击它们时会加载它们.每个类别都有自己的页面.这些页面本身就是单独的类(每个页面都有自己的ui,cpp和h).加载"首选项"窗口时,页面将被实例化并加载到QStackedWidget中.然后将Stackedwidget放入QScrollArea中,以便在必要时滚动.

但是,有一个问题.自从我添加了QStackedWidget之后,QScrollArea 总是有一个垂直滚动条,即使当前页面足够短也不需要一个:(图片显示最短的页面)

配置滚动条问题

ScrollArea垂直滚动策略设置为Qt :: ScrollBarAsNeeded,因此逻辑上它应该只显示一个条,如果页面大于可视区域.

这是我已经尝试解决的问题:

  1. 将滚动策略设置为Qt :: ScrollBarAlwaysOff.虽然这摆脱了滚动条,但它不能接受,因为它不会让用户知道他们需要在长页面上滚动.

  2. 设置QStackedwidget的最小/最大高度.如果我将滚动条设置为足够低的值,这会使滚动条消失,但这是不可接受的,因为它会导致某些小部件具有压扁的外观.

我知道问题与QStackedWidget有关,但由于这是我第一次使用QStackedWidget,我不确定它是什么.我也注意到卷轴的数量总是相同的; 即,无论页面小部件有多大/多小,可滚动区域总是相同的大小.出于某种原因,它比最长的页面略大.起初我以为我在每页底部放置的垂直垫片来收紧布局是造成这种情况的,但取出它们并没有解决它.

更新:这是控制Stackedwidget的代码:

void Newconfig::on_Categories_currentItemChanged(QTreeWidgetItem *current)
{

    QModelIndex index=ui->Categories->currentIndex();
    int idx=index.row();

    QString category=current->text(0);

    this->setWindowTitle("Preferences -- " + category);

    if (stack->currentWidget() != 0) {
        stack->currentWidget()->setSizePolicy(QSizePolicy::Ignored,
                                                    QSizePolicy::Ignored);
    }
    stack->setCurrentIndex(idx);
    stack->currentWidget()->setSizePolicy(QSizePolicy::Expanding,
                                                QSizePolicy::Expanding);
    adjustSize();

}
Run Code Online (Sandbox Code Playgroud)

qt qscrollarea

4
推荐指数
1
解决办法
1723
查看次数

通过QTreeWidget节点迭代

正如我在过去几个月中多次发布的那样,我正在Qt写一篇期刊/日记应用程序.条目按年,月,日和条目(按天分类条目的默认配置)或年,月和条目(同一月份的所有条目分组在一起)在QTreeWidget中排序

入口节点有两列:第一列是可见的并保存条目名称.第二列是不可见的,并保存数据库中相应条目的行号.选择该条目后,程序将根据该行号执行选择查询并显示内容.Root,year,month,(和day,如果已启用)节点也有第二列,但其中的行号始终为-1.(有效行数从0开始)

日志工具栏已具有后退和前进按钮,用户可以查看下一个和上一个条目.虽然此功能已经有效,但树中当前选定的项目不会随之改变,而这正是我想要解决的问题.

我已经确定最好的方法是使用循环函数扫描每个的第二个隐藏列值,直到找到正确的行号.每次单击后退/前进按钮都会再次调用此功能,因此一旦我开始工作,所选节点将始终与正在查看的当前条目匹配.

缺点是如果数据库变得庞大,这种方法可能会很慢,但我无能为力.用户可能会删除条目或将其随机播放,因此仅依靠rownumber ++或rownumber--可能会导致问题.由于数据库没有填写缺失的行号但只是继续下一行,如果程序总是假定数据库中的每一行在任何给定时间仍然存在,则可能会出现问题.

我的问题是如何扫描QTreeWidget中每个节点的特定列?

c++ qt qtreewidget

2
推荐指数
1
解决办法
9149
查看次数

标签 统计

qt ×3

c++ ×1

qmake ×1

qscrollarea ×1

qtreewidget ×1