我需要将Qt遗留代码从4.7转换为5.8 ,我在Qt Creator 4.2.1 Clang 7.0(Apple)64bit中有编译错误。
查看.cpp文件
#include "frmMainTableView_UI.h"
#include <QHeaderView>
void frmMainTableView_UI::setupUI(const QMap<int, QString> &columnNames_, bool hasRowLabels_, QWidget *parent_)
{
widget = new QWidget(parent_);
layout = new QVBoxLayout(widget);
layout->setSpacing(0);
layout->setMargin(1);
frmMainToolbar_UI::setupUI(columnNames_, widget);
tableSplitter = new QSplitter(widget);
table = new mpiTableView(hasRowLabels_, widget);
tableCopy = new QShortcut(Qt::CTRL + Qt::Key_C, table);
if (!hasRowLabels_)
table->verticalHeader()->hide();
table->setSelectionMode(QAbstractItemView::ExtendedSelection);
table->setSelectionBehavior(QAbstractItemView::SelectRows);
table->setAlternatingRowColors(true);
table->horizontalHeader()->setHighlightSections(false);
table->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); // Error convert Qt4 to Qt5 ??
table->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); // Error convert Qt4 to Qt5 ??
tableSplitter->addWidget(table);
tableSplitter->setStretchFactor(0, 3);
layout->addWidget(toolbar);
layout->addWidget(tableSplitter);
}
.cpp中的2个错误
在../src/ui/frmMainTableView_UI.cpp:1中包含的文件中: ../src/ui/frmMainTableView_UI.h:21:18:警告:&#39; frmMainTableView_UI :: setupUI&#39;隐藏重载的虚函数[-Woverloaded-virtual] virtual void setupUI(const QMap&amp; columnNames_,bool hasRowLabels_,QWidget * parent_ = 0); ^
../ src / ui / frmMainToolbar_UI.h:31:18:注意:隐藏的重载虚函数&#39; frmMainToolbar_UI :: setupUI&#39;这里声明:参数数量不同(2对3) virtual void setupUI(const QMap&amp; columnNames_,QWidget * parent_ = 0); ^
../ src / ui / frmMainTableView_UI.cpp:24:30:错误:没有名为&#39; setResizeMode&#39;在&#39; QHeaderView&#39; ;你是说&section; sectionResizeMode&#39;? 表 - &GT; verticalHeader() - &GT; setResizeMode(QHeaderView :: ResizeToContents); // JDL错误将Qt4转换为Qt5 ?? ^ ~~~~~~~~~~~~ sectionResizeMode /Users/john/Qt/5.8/clang_64/lib/QtWidgets.framework/Headers/qheaderview.h:133:16:注意:&#39; sectionResizeMode&#39;在这里宣布 ResizeMode sectionResizeMode(int logicalIndex)const; ^
../ src / ui / frmMainTableView_UI.cpp:25:32:错误:没有名为&#39; setResizeMode&#39;在&#39; QHeaderView&#39; ;你是说&section; sectionResizeMode&#39;? 表 - &GT; horizontalHeader() - &GT; setResizeMode(QHeaderView :: ResizeToContents); // JDL错误将Qt4转换为Qt5 ?? ^ ~~~~~~~~~~~~ sectionResizeMode /Users/john/Qt/5.8/clang_64/lib/QtWidgets.framework/Headers/qheaderview.h:133:16:注意:&#39; sectionResizeMode&#39;在这里宣布 ResizeMode sectionResizeMode(int logicalIndex)const; ^
1次警告,产生2次错误 make:*** [frmMainTableView_UI.o]错误1 18:29:48:过程&#34; / usr / bin / make&#34;退出代码2。 构建/部署项目mypersonalindex时出错(工具包:Desktop Qt 5.8.0 clang 64bit) 执行步骤&#34;制作&#34;
Qt5文档提到了 QHeaderView的过时成员 QHeaderView类的以下成员已过时。它们用于保持旧的源代码工作。我们强烈建议不要在新代码中使用它们。
(已废弃)void setResizeMode(ResizeMode模式)
我的C ++技能非常有限,您是否看到任何可以将其从Qt4转换为Qt5的小调整。 ......那么替代品是什么?
答案 0 :(得分:8)
我猜你需要更换两条过时的行:
table->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
table->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
使用以下Qt 5代码:
table->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
table->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
请参阅docs。