在Qt 4.7中强制调用QString(const char *)构造函数

时间:2012-05-24 10:05:42

标签: qt qt4

我正在尝试编译用Qt 4.6编写的库。在我目前的Linux机器上,我只安装了Qt 4.7。以下代码部分:

/*file try.h*/
void fileOpen(QString s = NULL) ; 

/*file try.cpp*/
void MainWindow::fileOpen(QString s) {
     QString filename ;
     if(s.isNull()) filename = QFileDialog::getOpenFileName(
    this,
    "Choose a file",
    ".",
    "Source file (*.)");
else filename = s ;
}

编译时出现以下错误(我使用了cmake,但相应的行代码是上面列出的代码):

In member function ‘virtual int MainWindow::qt_metacall(QMetaObject::Call, int,     
void**)’:                                                                                          
/homes/combi/hodorog/Developments/axelOld/build/axel/src/QGui/moc_MainWindow.cxx:141:26:        
error: conversion from ‘long int’ to ‘QString’ is ambiguous
/homes/combi/hodorog/Developments/axelOld/build/axel/src/QGui/moc_MainWindow.cxx:141:26:   
note: candidates are:
/usr/include/QtCore/qstring.h:426:43: note: QString::QString(const char*)
/usr/include/QtCore/qstring.h:105:14: note: QString::QString(const QChar*)

所以我猜测问题是在qt中。 4.7。有两个QString构造函数可以将指针作为参数(如编译错误中所列),而在qt 4.6中。只有一个QString构造函数可以将指针作为参数。如何强制QString以const char *作为参数调用构造函数?

非常感谢您的帮助, madalina

1 个答案:

答案 0 :(得分:2)

void fileOpen(QString s = NULL);

您正尝试使用QString构建0对象。看起来你把指针的null与空QString混淆了。 null QString是使用构造函数QString()创建的。鉴于您的函数是如何实现的(参考s.isNull()),您应该将函数声明更改为

void fileOpen(QString s = QString());