Как использовать библиотеки kde в qt?

Извините меня за мой плохой английский. Как использовать библиотеки kde в qt? Я ищу и google для этого, но без хорошего ответа. cpp-файл

#include <QCoreApplication>
#include <QDebug>
#include <KDE/KWindowSystem>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << "Hello World";
//  bool wayland = KWindowSystem::isPlatformWayland();
//  qDebug() << wayland;
//  KWindowSystem::self();
    foreach (const auto &wid, KWindowSystem::self()->stackingOrder())      {
        qDebug() << "Hi";
    }
    return a.exec();
}

про файл

######################################################################
# Automatically generated by qmake (3.1) Tue Mar 7 02:09:59 2017
######################################################################

TEMPLATE = app
TARGET = firstqt
INCLUDEPATH += /usr/include/KF5/KWindowSystem .

# Input
SOURCES += main.cpp
LIBS += -lkdeui

Я получаю сообщение об ошибке: рыба: «./firstqt» завершается сигналом SIGSEGV (ошибка границы адреса)

Заранее спасибо.


person mojtaba baghban    schedule 07.03.2017    source источник
comment
Я снова ищу и обнаружил, что LIBS += -lkdeui для kde4, и это должно быть LIBS += -lKF5WindowSystem   -  person mojtaba baghban    schedule 07.03.2017


Ответы (2)


Я снова ищу и обнаружил, что LIBS += -lkdeui для kde4, и это должно быть LIBS += -lKF5WindowSystem, теперь мой код main.cpp

#include <QCoreApplication>
#include <KWindowSystem>
#include <QDebug>

// using KWallet::Wallet;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    for(int i = 0; i < KWindowSystem::stackingOrder().count(); i++)
    {
        qDebug() << "Hi";
    }
    return a.exec();
}

и main.pro есть

TARGET = wallet
TEMPLATE = app
SOURCES += main.cpp
LIBS += -lKF5WindowSystem
INCLUDEPATH += /usr/include/KF5/KWindowSystem \

и kwindowsystem распознал, но это только выводит предупреждение:

org.kde.kwindowsystem: не удалось найти плагин платформы

теперь в чем проблема? Спасибо.

person mojtaba baghban    schedule 07.03.2017

Попробуйте изменить QCoreApplication на QApplication. Кажется, вы должны явно указать, что вы пишете приложение (а не плагин для kde). Для меня отлично работает следующий код:

#include <QApplication>
#include <KWindowSystem>
#include <iostream>

int main (int argc, char *argv[])
{
  QApplication app(argc, argv);
  QList<WId> stackingOrder = KWindowSystem::stackingOrder();

  for ( auto wid : stackingOrder ) {
    std::cout << "wid=" << wid << std::endl;
  }

  return 0;
}

Скомпилируйте следующим образом:

g++ -std=c++11 -fPIC -I/usr/include/KF5/KWindowSystem ./test.cpp -o test
`pkg-config --libs --cflags Qt5Widgets` -lKF5WindowSystem

У меня сложилось впечатление, что документация по kde5/plasma, к сожалению, очень плохая.

Единственный учебник для начинающих, который мне удалось найти

В более сложных случаях вы должны смотреть непосредственно в code_1 или/и code_2 установка пакеты разработки, например. Debian также не является прямым.

person user1831690    schedule 21.06.2018