What is type of this member of class?

Trong Qt em thấy người ta có tạo lớp QDesktopServices, sau khi include nó vào project thì người ta gọi được như thế này:

#include <QDesktopServices>
#include <QUrl>

....
QDesktopServices::openUrl(QUrl("http://google.com.vn/"));

Vậy openUrl của lớp QDesktopServices nó là cái gì? Định nghĩa nó trong class như thế nào?
Chắc chắn nó không phải là function rồi, vì nó có thể được gọi không thông qua đối tượng cụ thể. Vậy em muốn tạo một chức năng tương tự như thế trong class thì làm thế nào? @ltd


À, cái openUrl cụ thể là bool openUrl(const QUrl& url);
Vậy là nó vẫn là hàm, nhưng làm sao để gọi execute được như trên thì em chưa rõ.
Hay là chỉ trong Qt creator mới dùng được như thế :dizzy_face:

Em dùng Qt mấy nhỉ, 4x hay 5? Gỉả sử em dùng Qt 4.8 nhé (Qt 5 em search tương tự)

Đây là định nghĩa của openUrl trên Qt documents.

http://qt-project.org/doc/qt-4.8/qdesktopservices.html#openUrl

Đây là khai báo ở file header: qdesktopservices.h

https://qt.gitorious.org/qt/qt/source/57756e72adf2081137b97f0e689dd16c770d10b1:src/gui/util/qdesktopservices.h#L62

Đây là định nghĩa ở file source: qdesktopservices.cpp

https://qt.gitorious.org/qt/qtbase/source/0c3cfdba45f5e3db430b41649750dc767c93b888:src/gui/util/qdesktopservices.cpp#L176

Nó là static nên có thể gọi trực tiếp thế này. Google thêm về static trong C++ nhé. Hoặc hỏi ở topic khác ^^

Đặt từ khóa static phía trước như trong file header ở trên.

1 Like

Nó là static function đó bạn :smile: . Bạn không cần phải tạo ra đối tượng của lớp để có thể gọi static function. Còn bạn muốn coi source để xem nó làm như thế nào thì bạn có thể tìm tới file .cpp mà xem, vì nó opensource mà, lúc cài vào sẽ có thêm phần source kèm theo nhé

2 Likes

Thanks mọi người, em test thử được rồi:

#include <iostream>
#include <string>
using namespace std;

class test  {

public:
    test();
    ~test();

    static void show(const string& s);
private:

};

void test::show(const string& s)    {

    cout << s.c_str() << endl;
}

int main()  {

    test::show(string("String"));
    return 0;
}
2 Likes

Good job well done :+1:

Ngoài ra kiểu enum khi đặt trong class cũng có thể truy cập không thông qua đối tượng.

#include <iostream>
using namespace std;

class test  {

public:
    enum value { value1, value2, value3 };
    test();
    ~test();

private:

};

int main()  {

    cout << test::value1 << " " << test::value2 << " " << test::value3 << endl;
    return 0;
}

enum là trường hợp khác rồi em. Nhưng đúng, enum cũng làm được như vậy.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?