标签: qstring

如何通过QSignalMapper或其他方式将QString从QMenu传递到Qt槽

我有一个有许多子菜单的QMenu.这些是动态创建的,即名称菜单来自db并在循环中创建.现在我想在单击菜单时触发相同的插槽trigger()或类似,但我需要将QString菜单名称传递给插槽,以便我可以执行特定于菜单的操作.我试过这个,即将QAction*传递给触发事件并使用setData,但我得到了运行时错误.

object :: connect:没有这样的信号QAction :: triggered(QAction*)

for(int j=0; j<channelTypes[i].getNumChannels() ; j++){
        QAction *subMenuAct = subMenu->addAction(tr(c_name)); // c_name the menu name
        subMenuAct->setData(ch_name);
        connect(subMenuAct, SIGNAL(triggered(QAction *)), this, SLOT(playChannel(QAction *))); // playChannel is the slot
}

void <ClassName>::playChannel(QAction *channelAction)
{
     QString str = channelAction->data().toString();
    qDebug() << "Selected - " << str;
}
Run Code Online (Sandbox Code Playgroud)

或者,我也尝试过QSignalMapper,其中signalMapper是在构造函数中初始化的数据成员

signalMapper = new QSignalMapper(this);
Run Code Online (Sandbox Code Playgroud)

for(int j=0; j<channelTypes[i].getNumChannels() ; j++){
       QAction *subMenuAct = subMenu->addAction(tr(c_name));

       connect(subMenuAct, SIGNAL(triggered()), signalMapper, SLOT(map()));
       signalMapper->setMapping(subMenu, ch_name);
       connect(signalMapper, SIGNAL(mapped(QString)), this, SLOT(playChannel(QString)));
}
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,我没有得到任何错误,但是没有调用插槽函数playChannel.如果有人能帮助解决问题,我将非常感激.

更新1:我从其他示例中看到的唯一区别是,通常人们将 …

c++ qstring qt4 qmenu qt-signals

6
推荐指数
1
解决办法
3570
查看次数

QString []和QStringList之间有什么区别

QStringList的对象和QStrings数组之间有什么区别?我的意思是它们似乎都表现为数组.

c++ arrays qstring qt qtcore

6
推荐指数
1
解决办法
1万
查看次数

将QString转换为std :: string

我已经看过其他几篇关于将QString转换为std :: string的帖子,它应该很简单.但不知怎的,我收到了一个错误.

我的代码使用cmake编译成一个VS项目(我正在使用VS express),所以QT库没有问题,我编写的GUI除了这部分之外还有用.

我有一个QComboBox cb将名称保存到某些对象,并且QLineEdit lineEdit允许我指定我要查找的对象的名称.当我按下go按钮时,它应该运行一个经过测试和工作的函数,输入来自QComboBoxlineEditas参数.

这是单击go按钮时的代码:

void gui::on_go_clicked(){
    std::string str(cb->currentText().toStdString());
    //std::cout << str << "\n";
    //QString qstr = lineEdit->text();
    //std::cout<<lineEdit->text().toStdString();
    updateDB(str, lineEdit->text().toStdString());
}
Run Code Online (Sandbox Code Playgroud)

第一行,创建str,工作正常.IE库函数或没有问题toStdString().但是当它执行我的函数时,程序会中断,并且它不是因为函数,它是因为它试图转换的部分lineEdit->text().toStdString().

这只是当我在lineEdit框中写下"测试"一词时.我已经看到了其他关于unicode的答案,我曾经简单地尝试过,但我可以假设用户不会在lineEdit框中添加任何特殊字符,除非"_"和".",它们不应该是unicode.

c++ qstring qt stdstring

6
推荐指数
1
解决办法
1万
查看次数

现有C++项目的Qt UI

我已经编写了一个C++程序,我想为它编写一个GUI.我意识到Qt是一个很棒的工具,但是,Qt有它自己的类,这让我很困惑.例如:Qt有一个名为QString的类,而不是String.

我想知道我是否可以在C++中混合使用C++代码和Qt代码?

c++ user-interface qstring qt

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

如何有效地对 QByteArray 进行分区?

我想有效地对 QByteArray 消息进行分区,因此我实现的这个函数采用字节(我想要提取的部分)和 toEnd 标志,该标志告诉我是否要提取第 1 部分直到数组末尾。我的直径是 spcae ' '

例如,如果我有:

ba = "HELLO HOW ARE YOU?"
ba1 = getPart(ba, 1, false) -> ba1 = "HELLO"
ba2 = getPart(ba, 2, true) -> ba2 = "HOW ARE YOU?"
ba3 = getPart(ba, 3, false) -> ba3 = "ARE"
Run Code Online (Sandbox Code Playgroud)

下面的函数工作得很好,但我想知道这是否有效。我应该考虑使用 split 函数吗?

QByteArray Server::getPart(const QByteArray message, int part, bool toEnd)
{
    QByteArray string;
    int startsFrom = 0;
    int endsAt = 0;
    int count = 0;
    for(int i = 0; i < message.size(); i++) …
Run Code Online (Sandbox Code Playgroud)

string qstring qt substring qbytearray

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

错误LNK2001:未解析的外部符号"__declspec(dllimport)public:class QString&__thiscall QString :: operator =(class QString &&)"

我很想找到有关上述错误的任何信息.

我正在研究visual studio 2010.当我编译我的项目(32位),在调试或发布时,我得到以下消息:

1> heterogeneous.obj:错误LNK2001:未解析的外部符号"__declspec(dllimport)public:class QString&_ thiscall QString :: operator =(class QString &&)"( _ imp _ ?? 4QString @@ QAEAAV0 @ $$ QAV0 @@ Z )

1> debug \nori.exe:致命错误LNK1120:1个未解析的外部

我在链接器 - >输入中链接了QtCore4.lib,我将Qt\4.8.2\lib添加到Linker-> General中的库目录,我包括Qt\4.8.2\include和Qt\4.8.2\include\QtCore在C/C++中 - >一般.在我看来,他们应该定义QString.我不知道还能做些什么.

非常感谢您的帮助.

c++ qstring visual-studio-2010 lnk2001

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

如何从Qt中的字符串中删除重音符号/变音符号?

如何从Qt中删除字符串中的变音符号.例如,这个:

QString test = QString::fromUtf8("éçàÖœ");
qDebug() << StringUtil::removeAccents(test);
Run Code Online (Sandbox Code Playgroud)

应该输出:

ecaOoe
Run Code Online (Sandbox Code Playgroud)

string qstring qt diacritics

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

C++ Qt返回空QString

我做了一个返回a的函数QString.在我的函数中的某些点它应该返回一个空的QString.

刚回来""不起作用.当我使用QString::isEmpty()它时不是.我的"应急计划"是返回一个"空"字符串并检查文本是否为"空".但我不认为那是好风格.

那我怎么回空QString

c++ qstring qt

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

有效地比较QString和std :: string是否相等

我想有效地比较QString和std :: string的(in)相等.哪种方法最好,可能没有创建中间对象?

c++ qstring qt std stdstring

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

Qt QString to QByteArray and back

I have a problem with tranformation from QString to QByteArray and then back to QString:

int main() {

    QString s;

    for(int i = 0; i < 65536; i++) {
        s.append(QChar(i));
    }

    QByteArray ba = s.toUtf8();

    QString s1 = QString::fromUtf8(ba);

    if(areSame(s, s1)) {
        qDebug() << "OK";
    } else {
       qDebug() << "FAIL";
       outputErrors(s, s1);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

As you can see I fill QString with all characters that are within 16bit range. and then convert them to QByteArray (Utf8) and …

c++ qstring qt qbytearray

5
推荐指数
2
解决办法
5373
查看次数